From 53e259087984ff748fca6fb932fdb9c663c2b365 Mon Sep 17 00:00:00 2001 From: Paul Razvan Berg Date: Wed, 20 Dec 2023 12:05:34 +0200 Subject: [PATCH] build: bump solc and v2 core (#244) * build: bump v2-core * build: bump solc to v0.8.23 * test: update precompiles * docs: roll v1.1.1 * test: bring back deployment addresess closes #193 * docs: update 1.1.1 date in changelog --------- Co-authored-by: andreivladbrg --- CHANGELOG.md | 13 +++++++++++-- foundry.toml | 2 +- package.json | 6 +++--- pnpm-lock.yaml | 8 ++++---- test/fork/Fork.t.sol | 11 +++++------ test/utils/Precompiles.sol | 4 ++-- 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd001820..fa7d7922 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,19 +4,28 @@ All notable changes to this project will be documented in this file. The format is based on [Common Changelog](https://common-changelog.org). +[1.1.1]: https://github.com/sablier-labs/v2-periphery/compare/v1.1.0...v1.1.1 [1.1.0]: https://github.com/sablier-labs/v2-periphery/compare/v1.0.3...v1.1.0 [1.0.3]: https://github.com/sablier-labs/v2-periphery/compare/v1.0.2...v1.0.3 [1.0.2]: https://github.com/sablier-labs/v2-periphery/compare/v1.0.1...v1.0.2 [1.0.1]: https://github.com/sablier-labs/v2-periphery/compare/v1.0.0...v1.0.1 [1.0.0]: https://github.com/sablier-labs/v2-periphery/releases/tag/v1.0.0 +## [1.1.1] - 2023-12-20 + +### Changed + +- Upgrade to V2 Core v1.1.2 ([#244](https://github.com/sablier-labs/v2-periphery/pull/244)) +- Use Solidity v0.8.23 ([#244](https://github.com/sablier-labs/v2-periphery/pull/244)) + ## [1.1.0] - 2023-12-17 ### Changed -- **Breaking** Upgrade to V2 Core v1.1.0 ([#191](https://github.com/sablier-labs/v2-periphery/pull/191)) +- **Breaking** Upgrade to V2 Core v1.1.1 ([#191](https://github.com/sablier-labs/v2-periphery/pull/191), + [#236](https://github.com/sablier-labs/v2-periphery/pull/236)) - Refactor import paths to use Node.js dependencies([#236](https://github.com/sablier-labs/v2-periphery/pull/236)) -- Upgrade Solidity to `0.8.21` ([#187](https://github.com/sablier-labs/v2-periphery/pull/187)) +- Use Solidity v0.8.21 ([#187](https://github.com/sablier-labs/v2-periphery/pull/187)) ### Added diff --git a/foundry.toml b/foundry.toml index 706cc65a..b3f4d297 100644 --- a/foundry.toml +++ b/foundry.toml @@ -15,7 +15,7 @@ out = "out" script = "script" sender = "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38" - solc = "0.8.21" + solc = "0.8.23" src = "src" test = "test" diff --git a/package.json b/package.json index 5749075e..3f6f41e3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@sablier/v2-periphery", "description": "Peripheral smart contracts for interacting with Sablier V2", - "version": "1.1.0", + "version": "1.1.1", "author": { "name": "Sablier Labs Ltd", "url": "https://sablier.com" @@ -12,7 +12,7 @@ "dependencies": { "@openzeppelin/contracts": "4.9.2", "@prb/math": "4.0.2", - "@sablier/v2-core": "1.1.1" + "@sablier/v2-core": "1.1.2" }, "devDependencies": { "@prb/test": "0.6.4", @@ -49,7 +49,7 @@ "web3" ], "peerDependencies": { - "@sablier/v2-core": "1.1.1" + "@sablier/v2-core": "1.1.2" }, "publishConfig": { "access": "public" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4045a97..a779d465 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ dependencies: specifier: 4.0.2 version: 4.0.2 '@sablier/v2-core': - specifier: 1.1.1 - version: 1.1.1(@prb/math@4.0.2) + specifier: 1.1.2 + version: 1.1.2(@prb/math@4.0.2) devDependencies: '@prb/test': @@ -88,8 +88,8 @@ packages: resolution: {integrity: sha512-P0tTMsB6XQ0Wp61EYdXJYFhsOVGyZvcOFub2y9yk0sF+GYDusctR7DzEI+vOP0SILm3knFkEJASjewHEBppdRQ==} dev: true - /@sablier/v2-core@1.1.1(@prb/math@4.0.2): - resolution: {integrity: sha512-gi9tYlNm5z29tfRwU/RM3Ljo/yvCpy4cmLosAYkhBTcdheZkqfkhZLgSKFv2OVq+0aKxH+YvzqGlt/ZtDhAeXg==} + /@sablier/v2-core@1.1.2(@prb/math@4.0.2): + resolution: {integrity: sha512-b9tSDVlwNc28l/kuBnizqYQ399OxS5kL03m9d9v79WH/9IMjrEFq0dhVX/sMsIWvzj3GXZ60P1oL1QWymeLXJQ==} peerDependencies: '@prb/math': 4.0.x dependencies: diff --git a/test/fork/Fork.t.sol b/test/fork/Fork.t.sol index f24afe72..fb2b3b59 100644 --- a/test/fork/Fork.t.sol +++ b/test/fork/Fork.t.sol @@ -2,9 +2,8 @@ pragma solidity >=0.8.19 <0.9.0; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -// import { ISablierV2LockupDynamic } from "@sablier/v2-core/src/interfaces/ISablierV2LockupDynamic.sol"; -// import { ISablierV2LockupLinear } from "@sablier/v2-core/src/interfaces/ISablierV2LockupLinear.sol"; -import { Precompiles as V2CorePrecompiles } from "@sablier/v2-core/test/utils/Precompiles.sol"; +import { ISablierV2LockupDynamic } from "@sablier/v2-core/src/interfaces/ISablierV2LockupDynamic.sol"; +import { ISablierV2LockupLinear } from "@sablier/v2-core/src/interfaces/ISablierV2LockupLinear.sol"; import { Fuzzers as V2CoreFuzzers } from "@sablier/v2-core/test/utils/Fuzzers.sol"; @@ -27,7 +26,7 @@ abstract contract Fork_Test is Base_Test, V2CoreFuzzers { function setUp() public virtual override { // Fork Ethereum Mainnet at a specific block number. - vm.createSelectFork({ blockNumber: 17_665_000, urlOrAlias: "mainnet" }); + vm.createSelectFork({ blockNumber: 18_821_300, urlOrAlias: "mainnet" }); // Set up the base test contract. Base_Test.setUp(); @@ -70,7 +69,7 @@ abstract contract Fork_Test is Base_Test, V2CoreFuzzers { /// @dev Loads all dependencies pre-deployed on Mainnet. function loadDependencies() private { - // TODO: update the contract addresses once they are deployed. - (, lockupDynamic, lockupLinear,) = new V2CorePrecompiles().deployCore(users.admin); + lockupDynamic = ISablierV2LockupDynamic(0x7CC7e125d83A581ff438608490Cc0f7bDff79127); + lockupLinear = ISablierV2LockupLinear(0xAFb979d9afAd1aD27C5eFf4E27226E3AB9e5dCC9); } } diff --git a/test/utils/Precompiles.sol b/test/utils/Precompiles.sol index 9f4d7e52..52127c11 100644 --- a/test/utils/Precompiles.sol +++ b/test/utils/Precompiles.sol @@ -11,9 +11,9 @@ contract Precompiles { //////////////////////////////////////////////////////////////////////////*/ bytes public constant BYTECODE_BATCH = - hex"6080806040523461001657611a4a908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081638c72706e14610c7d575080639b38b39a14610864578063bd4eb1a4146104ac5763e8d349611461004b57600080fd5b346104345760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610434576100826111c0565b61008a6110c7565b9060443567ffffffffffffffff808211610434573660238301121561043457816004013511610434573660246101208360040135028301011161043457806004013515610482576000805b8260040135821061044d5761010291508473ffffffffffffffffffffffffffffffffffffffff8516611589565b61010f816004013561130a565b9160005b82600401358110610130576040518061012c8682611185565b0390f35b8060e0610145828660040135602488016111e3565b01610163606061015d84886004013560248a016111e3565b01611359565b90610176838760040135602489016111e3565b91610194602061018e868a6004013560248c016111e3565b01611366565b6101ae6101a9868a6004013560248c016111e3565b611366565b916fffffffffffffffffffffffffffffffff6101dd60406101d78960048e013560248f016111e3565b01611223565b73ffffffffffffffffffffffffffffffffffffffff61020c8c61015d60809c8260248f946004013591016111e3565b94816040519761021b89611240565b16875216602086015216604084015273ffffffffffffffffffffffffffffffffffffffff8b166060840152151586830152151560a082015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608436030112610434576103c4926102c060e09360405161029581611279565b6102a160a08501611387565b81526102b060c0809501611387565b6020820152838501523690611399565b83830152604051957fab167ccc00000000000000000000000000000000000000000000000000000000875273ffffffffffffffffffffffffffffffffffffffff835116600488015273ffffffffffffffffffffffffffffffffffffffff60208401511660248801526fffffffffffffffffffffffffffffffff604084015116604488015273ffffffffffffffffffffffffffffffffffffffff60608401511660648801528201511515608487015260a0820151151560a4870152810151602064ffffffffff918281511660c489015201511660e486015201516101048401906020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b60208261014481600073ffffffffffffffffffffffffffffffffffffffff88165af1801561044157600090610409575b6001925061040282876113df565b5201610113565b506020823d602011610439575b81610423602093836112b1565b8101031261043457600191516103f4565b600080fd5b3d9150610416565b6040513d6000823e3d90fd5b6001906fffffffffffffffffffffffffffffffff61047860406101d786886004013560248a016111e3565b16019101906100d5565b60046040517f763e559d000000000000000000000000000000000000000000000000000000008152fd5b34610434576104ba366110ea565b909281156104825760009060005b838110610836575073ffffffffffffffffffffffffffffffffffffffff6104f29116918483611589565b6104fb8261130a565b9260005b838110610514576040518061012c8782611185565b61051f818588611404565b60a001908685610530838284611404565b60200161053c90611359565b9381610549858286611404565b60600161055590611366565b85610561818488611404565b60e0810161056e91611444565b9561057a929197611404565b61058390611366565b968c87610591818684611404565b60800161059d90611223565b946105a792611404565b6040016105b390611359565b90604051986105c18a611240565b73ffffffffffffffffffffffffffffffffffffffff168952151560208901521515604088015273ffffffffffffffffffffffffffffffffffffffff1660608701526fffffffffffffffffffffffffffffffff16608086015273ffffffffffffffffffffffffffffffffffffffff861660a08601523661063f91611399565b60c0850152369061064f92611498565b60e083015260405180927f168444560000000000000000000000000000000000000000000000000000000082526004820160209052610144820190805173ffffffffffffffffffffffffffffffffffffffff166024840152602081015115156044840152604081015115156064840152606081015173ffffffffffffffffffffffffffffffffffffffff16608484015260808101516fffffffffffffffffffffffffffffffff1660a484015260a081015173ffffffffffffffffffffffffffffffffffffffff1660c484015260c081015160e4840161074d916020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b60e0015190610124830161012090528151809152610164830191602001906000905b8082106107db57505050908060209203816000885af18015610441576000906107a8575b600192506107a182886113df565b52016104ff565b506020823d6020116107d3575b816107c2602093836112b1565b810103126104345760019151610793565b3d91506107b5565b919350916020606082610828600194885164ffffffffff604080926fffffffffffffffffffffffffffffffff815116855267ffffffffffffffff6020820151166020860152015116910152565b01940192018593929161076f565b916001906fffffffffffffffffffffffffffffffff61085b60806101d787898c611404565b160192016104c8565b346104345760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104345761089b6111c0565b6108a36110c7565b6044359167ffffffffffffffff8084116104345736602385011215610434578360040135116104345760248301903660246101408660040135028601011161043457836004013515610482576000805b85600401358210610c4b5761092091508473ffffffffffffffffffffffffffffffffffffffff8416611589565b61092d846004013561130a565b9260005b8560040135811061094a576040518061012c8782611185565b808661010061095f87948360040135866113f3565b0183610975606061015d868660040135856113f3565b610998602061018e8761098d818960040135886113f3565b9760040135866113f3565b906fffffffffffffffffffffffffffffffff8c73ffffffffffffffffffffffffffffffffffffffff6109fe6109ea60406101d78c6109de6101a98260048a01358e6113f3565b9a8760040135906113f3565b9261015d8b60809d8e9360040135906113f3565b948160405197610a0d89611240565b16875216602086015216604084015273ffffffffffffffffffffffffffffffffffffffff88166060840152151586830152151560a082015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60843603011261043457610bd392610ac260e093604051610a878161125d565b610a9360a08501611387565b8152610ab28660c095610aa7878201611387565b602085015201611387565b6040820152838501523690611399565b83830152604051957f96ce143100000000000000000000000000000000000000000000000000000000875273ffffffffffffffffffffffffffffffffffffffff835116600488015273ffffffffffffffffffffffffffffffffffffffff60208401511660248801526fffffffffffffffffffffffffffffffff604084015116604488015273ffffffffffffffffffffffffffffffffffffffff60608401511660648801528201511515608487015260a0820151151560a4870152810151604064ffffffffff918281511660c48901528260208201511660e489015201511661010486015201516101248401906020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b60208261016481600073ffffffffffffffffffffffffffffffffffffffff89165af1801561044157600090610c18575b60019250610c1182886113df565b5201610931565b506020823d602011610c43575b81610c32602093836112b1565b810103126104345760019151610c03565b3d9150610c25565b6001906fffffffffffffffffffffffffffffffff610c7360406101d7868b600401358a6113f3565b16019101906108f3565b3461043457610c8b366110ea565b929093831561109f57506000805b84821061107157610cc291508373ffffffffffffffffffffffffffffffffffffffff8416611589565b610ccb8361130a565b9360005b848110610ce4576040518061012c8882611185565b60c0610cf1828785611549565b0190610d03604061015d838987611549565b91610d14608061018e848a88611549565b92610d2e610d23848a88611549565b610100810190611444565b9091610d3e6101a9868c8a611549565b936020610d4c878d8b611549565b01359464ffffffffff861686036104345788610d7f606061015d8f80610d7960a06101d78f80958a611549565b95611549565b96604051998a61012081011067ffffffffffffffff6101208d0111176110425773ffffffffffffffffffffffffffffffffffffffff908b99610e3a99989764ffffffffff6fffffffffffffffffffffffffffffffff96956101009f86610e2e9b9a61012083016040521690521660208d0152151560408c0152151560608b01521660808901521660a087015273ffffffffffffffffffffffffffffffffffffffff8b1660c08701523690611399565b60e08501523691611498565b838201526040519283917fc33cd35e0000000000000000000000000000000000000000000000000000000083526020600484015273ffffffffffffffffffffffffffffffffffffffff815116602484015264ffffffffff602082015116604484015260408101511515606484015260608101511515608484015273ffffffffffffffffffffffffffffffffffffffff60808201511660a48401526fffffffffffffffffffffffffffffffff60a08201511660c484015273ffffffffffffffffffffffffffffffffffffffff60c08201511660e4840152610f4360e08201516101048501906020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b0151610140610144830152805180610164840152602061018484019201906000905b808210610fe75750505090806020920381600073ffffffffffffffffffffffffffffffffffffffff89165af1801561044157600090610fb4575b60019250610fad82896113df565b5201610ccf565b506020823d602011610fdf575b81610fce602093836112b1565b810103126104345760019151610f9f565b3d9150610fc1565b919350916020606082611034600194885164ffffffffff604080926fffffffffffffffffffffffffffffffff815116855267ffffffffffffffff6020820151166020860152015116910152565b019401920185939291610f65565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001906fffffffffffffffffffffffffffffffff61109560a06101d7868a8c611549565b1601910190610c99565b807f763e559d0000000000000000000000000000000000000000000000000000000060049252fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361043457565b9060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126104345773ffffffffffffffffffffffffffffffffffffffff91600435838116810361043457926024359081168103610434579160443567ffffffffffffffff9283821161043457806023830112156104345781600401359384116104345760248460051b83010111610434576024019190565b6020908160408183019282815285518094520193019160005b8281106111ac575050505090565b83518552938101939281019260010161119e565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361043457565b91908110156111f457610120020190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b356fffffffffffffffffffffffffffffffff811681036104345790565b610100810190811067ffffffffffffffff82111761104257604052565b6060810190811067ffffffffffffffff82111761104257604052565b6040810190811067ffffffffffffffff82111761104257604052565b6080810190811067ffffffffffffffff82111761104257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761104257604052565b67ffffffffffffffff81116110425760051b60200190565b90611314826112f2565b61132160405191826112b1565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061134f82946112f2565b0190602036910137565b3580151581036104345790565b3573ffffffffffffffffffffffffffffffffffffffff811681036104345790565b359064ffffffffff8216820361043457565b9190826040910312610434576040516113b181611279565b8092803573ffffffffffffffffffffffffffffffffffffffff81168103610434578252602090810135910152565b80518210156111f45760209160051b010190565b91908110156111f457610140020190565b91908110156111f45760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0181360301821215610434570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610434570180359067ffffffffffffffff82116104345760200191606082023603831361043457565b9291926114a4826112f2565b6040946114b3865192836112b1565b8195848352602080930191606080960285019481861161043457925b8584106114df5750505050505050565b8684830312610434578251906114f48261125d565b84356fffffffffffffffffffffffffffffffff81168103610434578252858501359067ffffffffffffffff8216820361043457828792838b95015261153a868801611387565b868201528152019301926114cf565b91908110156111f45760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee181360301821215610434570190565b90604080516020907f23b872dd000000000000000000000000000000000000000000000000000000008282015233602482015260449030828201528660648201526064815260a081019080821067ffffffffffffffff831117611042576115f29185528561179d565b73ffffffffffffffffffffffffffffffffffffffff94858516958451917fdd62ed3e0000000000000000000000000000000000000000000000000000000083523060048401521690816024820152838184818a5afa90811561177a57908891600091611747575b5010611669575b50505050505050565b8351956000808589017f095ea7b3000000000000000000000000000000000000000000000000000000009a8b82528560248c0152868b0152858a526116ad8a611295565b89519082855af1906116bd6118bd565b82611714575b5081611709575b50611660576116fd966116f8945193840152602483015260008183015281526116f281611295565b8261179d565b61179d565b38808080808080611660565b90503b1515386116ca565b80919250519085821592831561172f575b50505090386116c3565b61173f9350820181019101611785565b388581611725565b91508482813d8311611773575b61175e81836112b1565b81010312611770575087905138611659565b80fd5b503d611754565b85513d6000823e3d90fd5b90816020910312610434575180151581036104345790565b6040516118089173ffffffffffffffffffffffffffffffffffffffff166117c382611279565b6000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16118026118bd565b9161191b565b8051908282159283156118a5575b505050156118215750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6118b59350820181019101611785565b388281611816565b3d15611916573d9067ffffffffffffffff8211611042576040519161190a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846112b1565b82523d6000602084013e565b606090565b91929015611996575081511561192f575090565b3b156119385790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156119a95750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110611a26575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b8181018301518682016044015285935082016119e556fea164736f6c6343000815000a"; + hex"6080806040523461001657611a4a908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081638c72706e14610c7d575080639b38b39a14610864578063bd4eb1a4146104ac5763e8d349611461004b57600080fd5b346104345760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610434576100826111c1565b61008a6110c7565b9060443567ffffffffffffffff808211610434573660238301121561043457816004013511610434573660246101208360040135028301011161043457806004013515610482576000805b8260040135821061044d5761010291508473ffffffffffffffffffffffffffffffffffffffff851661158b565b61010f816004013561133a565b9160005b82600401358110610130576040518061012c8682611185565b0390f35b8060e06101458286600401356024880161157a565b01610163606061015d84886004013560248a0161157a565b01611389565b906101768387600401356024890161157a565b91610194602061018e868a6004013560248c0161157a565b01611396565b6101ae6101a9868a6004013560248c0161157a565b611396565b916fffffffffffffffffffffffffffffffff6101dd60406101d78960048e013560248f0161157a565b01611253565b73ffffffffffffffffffffffffffffffffffffffff61020c8c61015d60809c8260248f9460040135910161157a565b94816040519761021b89611270565b16875216602086015216604084015273ffffffffffffffffffffffffffffffffffffffff8b166060840152151586830152151560a082015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608436030112610434576103c4926102c060e093604051610295816112a9565b6102a160a08501611451565b81526102b060c0809501611451565b602082015283850152369061140b565b83830152604051957fab167ccc00000000000000000000000000000000000000000000000000000000875273ffffffffffffffffffffffffffffffffffffffff835116600488015273ffffffffffffffffffffffffffffffffffffffff60208401511660248801526fffffffffffffffffffffffffffffffff604084015116604488015273ffffffffffffffffffffffffffffffffffffffff60608401511660648801528201511515608487015260a0820151151560a4870152810151602064ffffffffff918281511660c489015201511660e486015201516101048401906020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b60208261014481600073ffffffffffffffffffffffffffffffffffffffff88165af1801561044157600090610409575b600192506104028287611515565b5201610113565b506020823d602011610439575b81610423602093836112e1565b8101031261043457600191516103f4565b600080fd5b3d9150610416565b6040513d6000823e3d90fd5b6001906fffffffffffffffffffffffffffffffff61047860406101d786886004013560248a0161157a565b16019101906100d5565b60046040517f763e559d000000000000000000000000000000000000000000000000000000008152fd5b34610434576104ba366110ea565b909281156104825760009060005b838110610836575073ffffffffffffffffffffffffffffffffffffffff6104f2911691848361158b565b6104fb8261133a565b9260005b838110610514576040518061012c8782611185565b61051f81858861153a565b60a00190868561053083828461153a565b60200161053c90611389565b938161054985828661153a565b60600161055590611396565b8561056181848861153a565b60e0810161056e916113b7565b9561057a92919761153a565b61058390611396565b968c8761059181868461153a565b60800161059d90611253565b946105a79261153a565b6040016105b390611389565b90604051986105c18a611270565b73ffffffffffffffffffffffffffffffffffffffff168952151560208901521515604088015273ffffffffffffffffffffffffffffffffffffffff1660608701526fffffffffffffffffffffffffffffffff16608086015273ffffffffffffffffffffffffffffffffffffffff861660a08601523661063f9161140b565b60c0850152369061064f92611463565b60e083015260405180927f168444560000000000000000000000000000000000000000000000000000000082526004820160209052610144820190805173ffffffffffffffffffffffffffffffffffffffff166024840152602081015115156044840152604081015115156064840152606081015173ffffffffffffffffffffffffffffffffffffffff16608484015260808101516fffffffffffffffffffffffffffffffff1660a484015260a081015173ffffffffffffffffffffffffffffffffffffffff1660c484015260c081015160e4840161074d916020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b60e0015190610124830161012090528151809152610164830191602001906000905b8082106107db57505050908060209203816000885af18015610441576000906107a8575b600192506107a18288611515565b52016104ff565b506020823d6020116107d3575b816107c2602093836112e1565b810103126104345760019151610793565b3d91506107b5565b919350916020606082610828600194885164ffffffffff604080926fffffffffffffffffffffffffffffffff815116855267ffffffffffffffff6020820151166020860152015116910152565b01940192018593929161076f565b916001906fffffffffffffffffffffffffffffffff61085b60806101d787898c61153a565b160192016104c8565b346104345760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104345761089b6111c1565b6108a36110c7565b6044359167ffffffffffffffff8084116104345736602385011215610434578360040135116104345760248301903660246101408660040135028601011161043457836004013515610482576000805b85600401358210610c4b5761092091508473ffffffffffffffffffffffffffffffffffffffff841661158b565b61092d846004013561133a565b9260005b8560040135811061094a576040518061012c8782611185565b808661010061095f8794836004013586611529565b0183610975606061015d86866004013585611529565b610998602061018e8761098d81896004013588611529565b976004013586611529565b906fffffffffffffffffffffffffffffffff8c73ffffffffffffffffffffffffffffffffffffffff6109fe6109ea60406101d78c6109de6101a98260048a01358e611529565b9a876004013590611529565b9261015d8b60809d8e936004013590611529565b948160405197610a0d89611270565b16875216602086015216604084015273ffffffffffffffffffffffffffffffffffffffff88166060840152151586830152151560a082015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60843603011261043457610bd392610ac260e093604051610a878161128d565b610a9360a08501611451565b8152610ab28660c095610aa7878201611451565b602085015201611451565b604082015283850152369061140b565b83830152604051957f96ce143100000000000000000000000000000000000000000000000000000000875273ffffffffffffffffffffffffffffffffffffffff835116600488015273ffffffffffffffffffffffffffffffffffffffff60208401511660248801526fffffffffffffffffffffffffffffffff604084015116604488015273ffffffffffffffffffffffffffffffffffffffff60608401511660648801528201511515608487015260a0820151151560a4870152810151604064ffffffffff918281511660c48901528260208201511660e489015201511661010486015201516101248401906020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b60208261016481600073ffffffffffffffffffffffffffffffffffffffff89165af1801561044157600090610c18575b60019250610c118288611515565b5201610931565b506020823d602011610c43575b81610c32602093836112e1565b810103126104345760019151610c03565b3d9150610c25565b6001906fffffffffffffffffffffffffffffffff610c7360406101d7868b600401358a611529565b16019101906108f3565b3461043457610c8b366110ea565b929093831561109f57506000805b84821061107157610cc291508373ffffffffffffffffffffffffffffffffffffffff841661158b565b610ccb8361133a565b9360005b848110610ce4576040518061012c8882611185565b60c0610cf18287856111e4565b0190610d03604061015d8389876111e4565b91610d14608061018e848a886111e4565b92610d2e610d23848a886111e4565b6101008101906113b7565b9091610d3e6101a9868c8a6111e4565b936020610d4c878d8b6111e4565b01359464ffffffffff861686036104345788610d7f606061015d8f80610d7960a06101d78f80958a6111e4565b956111e4565b96604051998a61012081011067ffffffffffffffff6101208d0111176110425773ffffffffffffffffffffffffffffffffffffffff908b99610e3a99989764ffffffffff6fffffffffffffffffffffffffffffffff96956101009f86610e2e9b9a61012083016040521690521660208d0152151560408c0152151560608b01521660808901521660a087015273ffffffffffffffffffffffffffffffffffffffff8b1660c0870152369061140b565b60e08501523691611463565b838201526040519283917fc33cd35e0000000000000000000000000000000000000000000000000000000083526020600484015273ffffffffffffffffffffffffffffffffffffffff815116602484015264ffffffffff602082015116604484015260408101511515606484015260608101511515608484015273ffffffffffffffffffffffffffffffffffffffff60808201511660a48401526fffffffffffffffffffffffffffffffff60a08201511660c484015273ffffffffffffffffffffffffffffffffffffffff60c08201511660e4840152610f4360e08201516101048501906020809173ffffffffffffffffffffffffffffffffffffffff81511684520151910152565b0151610140610144830152805180610164840152602061018484019201906000905b808210610fe75750505090806020920381600073ffffffffffffffffffffffffffffffffffffffff89165af1801561044157600090610fb4575b60019250610fad8289611515565b5201610ccf565b506020823d602011610fdf575b81610fce602093836112e1565b810103126104345760019151610f9f565b3d9150610fc1565b919350916020606082611034600194885164ffffffffff604080926fffffffffffffffffffffffffffffffff815116855267ffffffffffffffff6020820151166020860152015116910152565b019401920185939291610f65565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6001906fffffffffffffffffffffffffffffffff61109560a06101d7868a8c6111e4565b1601910190610c99565b807f763e559d0000000000000000000000000000000000000000000000000000000060049252fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361043457565b9060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126104345773ffffffffffffffffffffffffffffffffffffffff91600435838116810361043457926024359081168103610434579160443567ffffffffffffffff9283821161043457806023830112156104345781600401359384116104345760248460051b83010111610434576024019190565b602090602060408183019282815285518094520193019160005b8281106111ad575050505090565b83518552938101939281019260010161119f565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361043457565b91908110156112245760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee181360301821215610434570190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b356fffffffffffffffffffffffffffffffff811681036104345790565b610100810190811067ffffffffffffffff82111761104257604052565b6060810190811067ffffffffffffffff82111761104257604052565b6040810190811067ffffffffffffffff82111761104257604052565b6080810190811067ffffffffffffffff82111761104257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761104257604052565b67ffffffffffffffff81116110425760051b60200190565b9061134482611322565b61135160405191826112e1565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061137f8294611322565b0190602036910137565b3580151581036104345790565b3573ffffffffffffffffffffffffffffffffffffffff811681036104345790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610434570180359067ffffffffffffffff82116104345760200191606082023603831361043457565b919082604091031261043457604051611423816112a9565b8092803573ffffffffffffffffffffffffffffffffffffffff81168103610434578252602090810135910152565b359064ffffffffff8216820361043457565b92919261146f82611322565b60409461147f60405192836112e1565b8195848352602080930191606080960285019481861161043457925b8584106114ab5750505050505050565b8684830312610434578251906114c08261128d565b84356fffffffffffffffffffffffffffffffff81168103610434578252858501359067ffffffffffffffff8216820361043457828792838b950152611506868801611451565b8682015281520193019261149b565b80518210156112245760209160051b010190565b919081101561122457610140020190565b91908110156112245760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0181360301821215610434570190565b919081101561122457610120020190565b90604080516020907f23b872dd000000000000000000000000000000000000000000000000000000008282015233602482015260449030828201528660648201526064815260a081019080821067ffffffffffffffff831117611042576115f49185528561179d565b73ffffffffffffffffffffffffffffffffffffffff94858516958451917fdd62ed3e0000000000000000000000000000000000000000000000000000000083523060048401521690816024820152838184818a5afa90811561177a57908891600091611749575b501061166b575b50505050505050565b8351956000808589017f095ea7b3000000000000000000000000000000000000000000000000000000009a8b82528560248c0152868b0152858a526116af8a6112c5565b89519082855af1906116bf6118bd565b82611716575b508161170b575b50611662576116ff966116fa945193840152602483015260008183015281526116f4816112c5565b8261179d565b61179d565b38808080808080611662565b90503b1515386116cc565b809192505190858215928315611731575b50505090386116c5565b6117419350820181019101611785565b388581611727565b809250858092503d8311611773575b61176281836112e1565b81010312610434578790513861165b565b503d611758565b85513d6000823e3d90fd5b90816020910312610434575180151581036104345790565b6040516118089173ffffffffffffffffffffffffffffffffffffffff166117c3826112a9565b6000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16118026118bd565b9161191b565b8051908282159283156118a5575b505050156118215750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6118b59350820181019101611785565b388281611816565b3d15611916573d9067ffffffffffffffff8211611042576040519161190a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846112e1565b82523d6000602084013e565b606090565b91929015611996575081511561192f575090565b3b156119385790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156119a95750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110611a26575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b8181018301518682016044015285935082016119e556fea164736f6c6343000817000a"; bytes public constant BYTECODE_MERKLE_STREAMER_FACTORY = - hex"6080806040523461001657611d7b908161001c8239f35b600080fdfe600436101561000d57600080fd5b60003560e01c6373b01dbb1461002257600080fd5b3461053b576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261053b5773ffffffffffffffffffffffffffffffffffffffff600435166004350361053b5773ffffffffffffffffffffffffffffffffffffffff602435166024350361053b5773ffffffffffffffffffffffffffffffffffffffff604435166044350361053b5764ffffffffff608435166084350361053b5760407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c36011261053b5760c060405260a43564ffffffffff8116810361053b5760805264ffffffffff60c4351660c4350361053b5760c43560a05260e435801515810361053b5761010435801515810361053b5767ffffffffffffffff610124351161053b573660236101243501121561053b5767ffffffffffffffff61012435600401351161050c57604051906101ae60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f610124356004013501160183610540565b600461012435908101358084523691016024011161053b5761012435600401356024610124350160208401376000602061012435600401358401015260405161020f6020820160806020908164ffffffffff91828151168552015116910152565b6040815280606081011067ffffffffffffffff60608301111761050c5760608101604052606060808201917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000080600435841b16845280602435841b166094830152604435831b1660a882015260643560bc8201527fffffffffff00000000000000000000000000000000000000000000000000000060843560d81b1660dc8201526102f56023838380516102ca8160e1840160208501610581565b81018a151560f81b60e182015288151560f81b60e28201520301600381018585015201838301610540565b01519020604051806117ca81011067ffffffffffffffff6117ca8301111761050c576117ca6105a5823973ffffffffffffffffffffffffffffffffffffffff60043581166117ca8301908152602435821660208201526044359091166040820152606435606082015264ffffffffff608435811660808084019190915251811660a080840191909152511660c082015285151560e08201528315156101008201526101209082900301906000f591821561050057602093604051926101409173ffffffffffffffffffffffffffffffffffffffff861685526064358786015264ffffffffff6084351660408601526104056060860160806020908164ffffffffff91828151168552015116910152565b151560a0850152151560c08401528060e0840152815180918401526104338161016093878587019101610581565b61014435610100840152610164356101208401527fb2f6bc588a802f2ce7f8dec57a5096c107d2fc000d5b4cc65745a2c0e232349c73ffffffffffffffffffffffffffffffffffffffff604435169373ffffffffffffffffffffffffffffffffffffffff6024351693817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f73ffffffffffffffffffffffffffffffffffffffff600435169601168101030190a473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761050c57604052565b60005b8381106105945750506000910152565b818101518382015260200161058456fe610160604081815234620002e05781620017ca803803809162000023828562000301565b833981010361012091828212620002e05783516001600160a01b038082169391849003620002e057602090818701519481861693848703620002e0578589015192831692838103620002e05760608a015190876200008460808d0162000325565b93609f190112620002e0578751918289016001600160401b03811184821017620002ca578952620000b860a08d0162000325565b8352620000c860c08d0162000325565b83880190815293620000dd60e08e0162000338565b91610100809e01620000ef9062000338565b93600097600160a01b60019003198954161788556080528960e0528d5260c05260a05289526101409788525164ffffffffff16600254915160281b69ffffffffff00000000001691600160501b600190031916171760025584519280840191808063095ea7b360e01b948581528860248901526000196044890152604488526200017988620002e5565b87519082885af16200018a6200044f565b8162000288575b50806200027d575b156200023b575b505050505050519161125d93846200056d853960805184818161037a015281816106400152610c8d015260a0518481816106ee0152610b7c015260c05184818161015001528181610aba01528181610f0d01526110cd015260e05184818161020c015281816105cc0152610c2e01525183818161032b01526105660152518281816107160152610b400152518181816101a001526108850152f35b62000271956200026b9388519384015260248301526044820152604481526200026481620002e5565b8262000346565b62000346565b388080808080620001a0565b50833b151562000199565b80915051838115918215620002a3575b505090503862000191565b8380929350010312620002c65782620002bd910162000338565b80833862000298565b5080fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b608081019081106001600160401b03821117620002ca57604052565b601f909101601f19168101906001600160401b03821190821017620002ca57604052565b519064ffffffffff82168203620002e057565b51908115158203620002e057565b60408051908101916001600160a01b03166001600160401b03831182841017620002ca57620003ba926040526000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1620003b36200044f565b9162000492565b80518281159182156200042c575b5050905015620003d55750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b8380929350010312620002e0578162000446910162000338565b808238620003c8565b3d156200048d573d906001600160401b038211620002ca576040519162000481601f8201601f19166020018462000301565b82523d6000602084013e565b606090565b91929015620004f75750815115620004a8575090565b3b15620004b25790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156200050b5750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b82851062000552575050604492506000838284010152601f80199101168101030190fd5b84810182015186860160440152938101938593506200052e56fe60806040818152600436101561001457600080fd5b600091823560e01c9081631686c90914610ba15750806316c3549d14610b655780631bfd681414610b295780633bfe03a814610afa5780633f31ae3f1461039e5780634800d97f1461034e57806351e75e8b1461031457806375829def14610230578063845aef4b146101e057806390e64d13146101c45780639e93e57714610174578063bb4b573414610133578063ce516507146100f15763f851a440146100bc57600080fd5b346100ed57816003193601126100ed5773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b5080fd5b50346100ed5760206003193601126100ed5760209061012a60043560ff6001918060081c60005282602052161b60406000205416151590565b90519015158152f35b50346100ed57816003193601126100ed576020905164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346100ed57816003193601126100ed576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346100ed57816003193601126100ed5760209061012a6110c5565b50346100ed57816003193601126100ed576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346103115760206003193601126103115761024b610ff5565b81549073ffffffffffffffffffffffffffffffffffffffff908183163381036102c357507fffffffffffffffffffffffff00000000000000000000000000000000000000009394501691829116178255337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808380a380f35b85517fc6cce6a400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152336024820152604490fd5b80fd5b50346100ed57816003193601126100ed57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346100ed57816003193601126100ed576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b509034610311576080600319360112610311576004359160243573ffffffffffffffffffffffffffffffffffffffff8116809103610af657604435906fffffffffffffffffffffffffffffffff8216809203610af2576064359067ffffffffffffffff95868311610aee5736602384011215610aee5782600401358781116109d5578060051b9360248582010190368211610aea5787516020810190858252868a8201528860608201526060815261045581611068565b5190208851602081019182526020815261046e8161101d565b5190209261047a6110c5565b610a8d576104a08560ff6001918060081c60005282602052161b60406000205416151590565b610a5d576104b360208a51980188611084565b8652602401602086015b828210610a4d575050509386945b845186101561055e5760208660051b86010151908181106000146105505788526020528587205b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461052357600101946104cb565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9088526020528587206104f2565b9186918989947f000000000000000000000000000000000000000000000000000000000000000003610a245783517f5fe3b56700000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a1a5786916109eb575b5084517fdcf844a700000000000000000000000000000000000000000000000000000000815260208160248173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001696876004840152165afa9081156109e15787916109ab575b50610982578360081c86526001602052848620600160ff86161b81541790558451906106a38261101d565b86825286602083015273ffffffffffffffffffffffffffffffffffffffff875416865193610100850190858210908211176109555787528352876020840152838684015260608301527f0000000000000000000000000000000000000000000000000000000000000000151560808301527f0000000000000000000000000000000000000000000000000000000000000000151560a083015284516107478161101d565b64ffffffffff600254818116835260281c16602082015260c083015260e0820152602060e08551927fab167ccc00000000000000000000000000000000000000000000000000000000845273ffffffffffffffffffffffffffffffffffffffff815116600485015273ffffffffffffffffffffffffffffffffffffffff838201511660248501526fffffffffffffffffffffffffffffffff8782015116604485015273ffffffffffffffffffffffffffffffffffffffff606082015116606485015260808101511515608485015260a0810151151560a485015264ffffffffff8360c08301518281511660c488015201511660e4850152015173ffffffffffffffffffffffffffffffffffffffff8151166101048401520151610124820152602081610144818873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af194851561094a5780956108ef575b5050937f28b58397e03322f670d6b223cc863f8c148e368b8b615412e6798a641a22842d838593602097825191825288820152a351908152f35b9095919294506020863d602011610942575b8161090e60209383611084565b810103126103115750935192907f28b58397e03322f670d6b223cc863f8c148e368b8b615412e6798a641a22842d836108b5565b3d9150610901565b8451903d90823e3d90fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b600485517fa4432b51000000000000000000000000000000000000000000000000000000008152fd5b90506020813d6020116109d9575b816109c660209383611084565b810103126109d5575188610678565b8680fd5b3d91506109b9565b86513d89823e3d90fd5b610a0d915060203d602011610a13575b610a058183611084565b810190611102565b876105fc565b503d6109fb565b85513d88823e3d90fd5b600484517fb3f3b2a6000000000000000000000000000000000000000000000000000000008152fd5b81358152602091820191016104bd565b6024858a51907f3548783b0000000000000000000000000000000000000000000000000000000082526004820152fd5b88517f74b43bd00000000000000000000000000000000000000000000000000000000081524260048201527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff166024820152604490fd5b8880fd5b8580fd5b8380fd5b8280fd5b5090346103115780600319360112610311575060025464ffffffffff825191818116835260281c166020820152f35b50346100ed57816003193601126100ed57602090517f000000000000000000000000000000000000000000000000000000000000000015158152f35b50346100ed57816003193601126100ed57602090517f000000000000000000000000000000000000000000000000000000000000000015158152f35b91905034610af65780600319360112610af657610bbc610ff5565b916024356fffffffffffffffffffffffffffffffff8116809103610ff15773ffffffffffffffffffffffffffffffffffffffff9182865416338103610fa85750508251917f5fe3b5670000000000000000000000000000000000000000000000000000000083526020928381600481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610f9e578791610f81575b5084517fdcf844a7000000000000000000000000000000000000000000000000000000008152848160248186807f00000000000000000000000000000000000000000000000000000000000000001696876004840152165afa908115610f77578891610f46575b50610cce6110c5565b159081610f3d575b50610ee057845190878084878501997fa9059cbb000000000000000000000000000000000000000000000000000000008b52169889602486015286604486015260448552610d2385611068565b885194610d2f8661101d565b8886527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656489870152519082855af13d15610ed2573d9167ffffffffffffffff8311610ea55790610dbc939291885192610daf897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160185611084565b83523d8b8985013e61112e565b8051848115918215610e85575b5050905015610e0257907f2e9d425ba8b27655048400b366d7b6a1f7180ebdb088e06bb7389704860ffe1f92918654169351908152a380f35b6084838551907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b83809293500103126109d55783015180151581036109d557808438610dc9565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b90610dbc929160609161112e565b84517f1351f21d0000000000000000000000000000000000000000000000000000000081524260048201527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff166024820152604490fd5b90501538610cd6565b90508481813d8311610f70575b610f5d8183611084565b81010312610f6c575138610cc5565b8780fd5b503d610f53565b86513d8a823e3d90fd5b610f989150843d8611610a1357610a058183611084565b38610c5e565b85513d89823e3d90fd5b7fc6cce6a400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff166004820152336024820152604490fd5b8480fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361101857565b600080fd5b6040810190811067ffffffffffffffff82111761103957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080810190811067ffffffffffffffff82111761103957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761103957604052565b64ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680151590816110fa575090565b905042101590565b90816020910312611018575173ffffffffffffffffffffffffffffffffffffffff811681036110185790565b919290156111a95750815115611142575090565b3b1561114b5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156111bc5750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110611239575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b8181018301518682016044015285935082016111f856fea164736f6c6343000815000aa164736f6c6343000815000a"; + hex"6080806040523461001657611d39908161001c8239f35b600080fdfe600436101561000d57600080fd5b60003560e01c6373b01dbb1461002257600080fd5b3461053b576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261053b5773ffffffffffffffffffffffffffffffffffffffff600435166004350361053b5773ffffffffffffffffffffffffffffffffffffffff602435166024350361053b5773ffffffffffffffffffffffffffffffffffffffff604435166044350361053b5764ffffffffff608435166084350361053b5760407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c36011261053b5760c060405260a43564ffffffffff8116810361053b5760805264ffffffffff60c4351660c4350361053b5760c43560a05260e435801515810361053b5761010435801515810361053b5767ffffffffffffffff610124351161053b573660236101243501121561053b5767ffffffffffffffff61012435600401351161050c57604051906101ae60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f610124356004013501160183610540565b600461012435908101358084523691016024011161053b5761012435600401356024610124350160208401376000602061012435600401358401015260405161020f6020820160806020908164ffffffffff91828151168552015116910152565b6040815280606081011067ffffffffffffffff60608301111761050c5760608101604052606060808201917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000080600435841b16845280602435841b166094830152604435831b1660a882015260643560bc8201527fffffffffff00000000000000000000000000000000000000000000000000000060843560d81b1660dc8201526102f56023838380516102ca8160e1840160208501610581565b81018a151560f81b60e182015288151560f81b60e28201520301600381018585015201838301610540565b015190206040518061178881011067ffffffffffffffff6117888301111761050c576117886105a5823973ffffffffffffffffffffffffffffffffffffffff60043581166117888301908152602435821660208201526044359091166040820152606435606082015264ffffffffff608435811660808084019190915251811660a080840191909152511660c082015285151560e08201528315156101008201526101209082900301906000f591821561050057602093604051926101409173ffffffffffffffffffffffffffffffffffffffff861685526064358786015264ffffffffff6084351660408601526104056060860160806020908164ffffffffff91828151168552015116910152565b151560a0850152151560c08401528060e0840152815180918401526104338161016093878587019101610581565b61014435610100840152610164356101208401527fb2f6bc588a802f2ce7f8dec57a5096c107d2fc000d5b4cc65745a2c0e232349c73ffffffffffffffffffffffffffffffffffffffff604435169373ffffffffffffffffffffffffffffffffffffffff6024351693817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f73ffffffffffffffffffffffffffffffffffffffff600435169601168101030190a473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761050c57604052565b60005b8381106105945750506000910152565b818101518382015260200161058456fe610160604081815234620002e0578162001788803803809162000023828562000301565b833981010361012091828212620002e05783516001600160a01b038082169391849003620002e057602090818701519481861693848703620002e0578589015192831692838103620002e05760608a015190876200008460808d0162000325565b93609f190112620002e0578751918289016001600160401b03811184821017620002ca578952620000b860a08d0162000325565b8352620000c860c08d0162000325565b83880190815293620000dd60e08e0162000338565b91610100809e01620000ef9062000338565b93600097600160a01b60019003198954161788556080528960e0528d5260c05260a05289526101409788525164ffffffffff16600254915160281b69ffffffffff00000000001691600160501b600190031916171760025584519280840191808063095ea7b360e01b948581528860248901526000196044890152604488526200017988620002e5565b87519082885af16200018a62000346565b8162000288575b50806200027d575b156200023b575b505050505050519161121b93846200056d8539608051848181610377015281816106460152610cc4015260a0518481816107320152610bb0015260c05184818161015101528181610afc01528181610f1b01526110b7015260e05184818161020e015281816105d00152610c63015251838181610327015261056801525182818161075a0152610b730152518181816101a201526108cd0152f35b62000271956200026b9388519384015260248301526044820152604481526200026481620002e5565b8262000389565b62000389565b388080808080620001a0565b50833b151562000199565b80915051838115918215620002a3575b505090503862000191565b8380929350010312620002c65782620002bd910162000338565b80833862000298565b5080fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b608081019081106001600160401b03821117620002ca57604052565b601f909101601f19168101906001600160401b03821190821017620002ca57604052565b519064ffffffffff82168203620002e057565b51908115158203620002e057565b3d1562000384573d906001600160401b038211620002ca576040519162000378601f8201601f19166020018462000301565b82523d6000602084013e565b606090565b60408051908101916001600160a01b03166001600160401b03831182841017620002ca57620003fd926040526000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1620003f662000346565b9162000492565b80518281159182156200046f575b5050905015620004185750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b8380929350010312620002e0578162000489910162000338565b8082386200040b565b91929015620004f75750815115620004a8575090565b3b15620004b25790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156200050b5750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b82851062000552575050604492506000838284010152601f80199101168101030190fd5b84810182015186860160440152938101938593506200052e56fe608080604052600436101561001357600080fd5b60003560e01c9081631686c90914610bd55750806316c3549d14610b985780631bfd681414610b5b5780633bfe03a814610b2c5780633f31ae3f1461039b5780634800d97f1461034a57806351e75e8b1461030f57806375829def14610232578063845aef4b146101e157806390e64d13146101c65780639e93e57714610175578063bb4b573414610133578063ce516507146100f25763f851a440146100b957600080fd5b346100ed5760006003193601126100ed57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b600080fd5b346100ed5760206003193601126100ed57602061012960043560ff6001918060081c60005282602052161b60406000205416151590565b6040519015158152f35b346100ed5760006003193601126100ed57602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760006003193601126100ed57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760006003193601126100ed5760206101296110af565b346100ed5760006003193601126100ed57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760206003193601126100ed5761024b610fe7565b60005473ffffffffffffffffffffffffffffffffffffffff808216923384036102c2577fffffffffffffffffffffffff00000000000000000000000000000000000000009350169182911617600055337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf80600080a3005b6040517fc6cce6a400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152336024820152604490fd5b346100ed5760006003193601126100ed5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100ed5760006003193601126100ed57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760806003193601126100ed5760243573ffffffffffffffffffffffffffffffffffffffff811681036100ed57604435906fffffffffffffffffffffffffffffffff821682036100ed5767ffffffffffffffff606435116100ed573660236064350112156100ed5767ffffffffffffffff60643560040135116100ed573660246064356004013560051b6064350101116100ed576040516020810190600435825273ffffffffffffffffffffffffffffffffffffffff831660408201526fffffffffffffffffffffffffffffffff841660608201526060815261048181611026565b519020604051602081019182526020815261049b8161100a565b519020916104a76110af565b610ace576104cf60043560ff6001918060081c60005282602052161b60406000205416151590565b610a9c57604051926104ed60206064356004013560051b0185611042565b60643560048101358552602401602085015b60246064356004013560051b60643501018210610a8c575050906000915b84518310156105645760208360051b860101519081811060001461055157600052602052600160406000205b92019161051d565b9060005260205260016040600020610549565b83907f000000000000000000000000000000000000000000000000000000000000000003610a6257604051907f5fe3b56700000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561099a57600092610a31575b506040517fdcf844a700000000000000000000000000000000000000000000000000000000815260208160248173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001697886004840152165afa90811561099a576000916109ff575b506109d55760043560081c60005260016020526040600020600160ff600435161b81541790556040516106b18161100a565b600081526000602082015273ffffffffffffffffffffffffffffffffffffffff600054169260405193610100850185811067ffffffffffffffff8211176109a657604052845273ffffffffffffffffffffffffffffffffffffffff831660208501526fffffffffffffffffffffffffffffffff8516604085015260608401527f0000000000000000000000000000000000000000000000000000000000000000151560808401527f0000000000000000000000000000000000000000000000000000000000000000151560a084015260405161078c8161100a565b64ffffffffff600254818116835260281c16602082015260c084015260e0830152602060e0604051937fab167ccc00000000000000000000000000000000000000000000000000000000855273ffffffffffffffffffffffffffffffffffffffff815116600486015273ffffffffffffffffffffffffffffffffffffffff838201511660248601526fffffffffffffffffffffffffffffffff604082015116604486015273ffffffffffffffffffffffffffffffffffffffff606082015116606486015260808101511515608486015260a0810151151560a486015264ffffffffff8360c08301518281511660c489015201511660e4860152015173ffffffffffffffffffffffffffffffffffffffff815116610104850152015161012483015260208261014481600073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af191821561099a57600092610965575b506020927f28b58397e03322f670d6b223cc863f8c148e368b8b615412e6798a641a22842d604073ffffffffffffffffffffffffffffffffffffffff85946fffffffffffffffffffffffffffffffff835195600435875216888601521692a3604051908152f35b91506020823d602011610992575b8161098060209383611042565b810103126100ed5790519060206108fe565b3d9150610973565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60046040517fa4432b51000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011610a29575b81610a1a60209383611042565b810103126100ed57518461067f565b3d9150610a0d565b610a5491925060203d602011610a5b575b610a4c8183611042565b810190611083565b9083610601565b503d610a42565b60046040517fb3f3b2a6000000000000000000000000000000000000000000000000000000008152fd5b81358152602091820191016104ff565b60246040517f3548783b0000000000000000000000000000000000000000000000000000000081526004356004820152fd5b6040517f74b43bd00000000000000000000000000000000000000000000000000000000081524260048201527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff166024820152604490fd5b346100ed5760006003193601126100ed57604060025464ffffffffff825191818116835260281c166020820152f35b346100ed5760006003193601126100ed5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346100ed5760006003193601126100ed5760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346100ed5760406003193601126100ed57610bee610fe7565b90602435906fffffffffffffffffffffffffffffffff82168092036100ed5773ffffffffffffffffffffffffffffffffffffffff908160005416338103610f9e575050604051907f5fe3b5670000000000000000000000000000000000000000000000000000000082526020918281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa90811561099a57600091610f81575b506040517fdcf844a7000000000000000000000000000000000000000000000000000000008152838160248186807f00000000000000000000000000000000000000000000000000000000000000001696876004840152165afa90811561099a57600091610f54575b50610d066110af565b159081610f4b575b50610eed5760405160008084868401987fa9059cbb000000000000000000000000000000000000000000000000000000008a52169788602485015287604485015260448452610d5c84611026565b60405193610d698561100a565b8785527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656488860152519082865af13d15610ee0573d9067ffffffffffffffff82116109a657610df59360405192610de7887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160185611042565b83523d60008885013e6110ec565b8051838115918215610ec0575b5050905015610e3c57907f2e9d425ba8b27655048400b366d7b6a1f7180ebdb088e06bb7389704860ffe1f916000541692604051908152a3005b608482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b83809293500103126100ed5782015180151581036100ed57808387610e02565b91610df5926060916110ec565b6040517f1351f21d0000000000000000000000000000000000000000000000000000000081524260048201527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff166024820152604490fd5b90501586610d0e565b90508381813d8311610f7a575b610f6b8183611042565b810103126100ed575186610cfd565b503d610f61565b610f989150833d8511610a5b57610a4c8183611042565b85610c94565b7fc6cce6a400000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff166004820152336024820152604490fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ed57565b6040810190811067ffffffffffffffff8211176109a657604052565b6080810190811067ffffffffffffffff8211176109a657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109a657604052565b908160209103126100ed575173ffffffffffffffffffffffffffffffffffffffff811681036100ed5790565b64ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680151590816110e4575090565b905042101590565b919290156111675750815115611100575090565b3b156111095790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561117a5750805190602001fd5b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b8481106111f7575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b8181018301518682016044015285935082016111b656fea164736f6c6343000817000aa164736f6c6343000817000a"; /*////////////////////////////////////////////////////////////////////////// DEPLOYERS