From 435490f1cb859084fa67e40ec95306c12f2db2bf Mon Sep 17 00:00:00 2001 From: david-uniswap <274080779+david-uniswap@users.noreply.github.com> Date: Tue, 26 May 2026 15:51:13 -0700 Subject: [PATCH] update UR briefcase initcode to v2.1.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/pkgs/universal-router is a git submodule. The briefcase hex literal in UniversalRouterDeployer.sol was last regenerated against an old submodule pin that predated the v2.1.1 commit (PR #470 upstream). The monorepo's submodule pin has since advanced past v2.1.1, but no one re-ran ./script/util/create_briefcase.sh, so deploys via the briefcase were silently shipping v2.1.0 bytecode. This patch rewrites only the hex literal in UniversalRouterDeployer.sol with the v2.1.1 bytecode. The briefcase protocols/ source reference files are intentionally NOT touched in this PR — they're documentation and can drift relative to the deployer without affecting deployments. A follow-up can sync them when convenient. Bytecode diff: - Old size: 23,587 bytes - New size: 26,404 bytes (~12% larger) - Old keccak: 0x7171fed0bc0dd1a41b55969fe1ebdb60d3eeb80750c3fa8d7230ea06142db561 - New keccak: 0x6dba80c0116a490d48657845492bb38374489ed49c296ac50614265f97221510 v2.1.0 → v2.1.1 brings: - PAY_PORTION_FULL_PRECISION command (slot 0x07) with 1e18 precision - Per-hop slippage on v2/v3 swaps via minHopPriceX36 - minHopPriceX36 field on V4 ExactInputSingleParams struct - Command space expanded (mask 0x3f → 0x7f) - v2 fee-on-transfer slippage fix (uses actual balance change) - OZ audit fixes m01, l03, n05, n08 Verification: - forge build clean - New initcode keccak matches a fresh forge compilation of the current submodule pin's UniversalRouter source. --- .../deployers/universal-router/UniversalRouterDeployer.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol b/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol index 1b90f31d..b87b8984 100644 --- a/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol +++ b/src/briefcase/deployers/universal-router/UniversalRouterDeployer.sol @@ -45,6 +45,6 @@ library UniversalRouterDeployer { * - evm_version: cancun */ function initcode() internal pure returns (bytes memory) { - return hex'6102a080604052346104145761014081615c2380380380916100218285610433565b833981010312610414576040519061014082016001600160401b038111838210176104005760405261005281610456565b825261006060208201610456565b6020830190815261007360408301610456565b906040840191825261008760608401610456565b91606085019283526080840151946080810195865260a08501519360a082019485526100b560c08701610456565b9660c083019788526100c960e08801610456565b958660e08501526100f16101206100e36101008b01610456565b998a61010088015201610456565b98896101208601526040519761010689610418565b6001600160a01b03908116895298891660208901908152905194519651604051919991979082169695821695911661013d88610418565b8752602087019586525192519151905160405190936001600160a01b039384169316608082016001600160401b0381118382101761040057604052815260208101928352604081019182526060810193845260405161019d604082610433565b600f815260208101906e2ab734bb32b939b0b62937baba32b960891b8252604051916101ca604084610433565b600183526020830191601960f91b83526101e38161046a565b610120526101f084610600565b61014052519020918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261025960c082610433565b5190206080523060c052516001600160a01b0390811661016052905161018052905181166101a05290516101c0526101e091909152905181166102005290518116610220529051811661024052905181166102605216610280526040516154ea9081610739823960805181614008015260a051816140c5015260c05181613fd9015260e051816140570152610100518161407d0152610120518161061d0152610140518161064601526101605181818161191f01528181611b020152613d230152610180518181816118fe01528181611b240152613d0201526101a0518161333f01526101c0518161339201526101e0518181816086015281816103a20152818161051d015281816124670152818161298201528181614c7101528181614ce801528181614dba01528181614f2e01526152c6015261020051818181602401528181611ec8015261202b0152610220518181816115d70152818161221901526137000152610240518181816107380152818161258e015261267a01526102605181818161042a0152612a5001526102805181818161077b01528181612da20152612ef40152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761040057604052565b601f909101601f19168101906001600160401b0382119082101761040057604052565b51906001600160a01b038216820361041457565b908151602081105f146104e4575090601f8151116104a4576020815191015160208210610495571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b038111610400575f54600181811c911680156105f6575b60208210146105e257601f81116105b0575b50602092601f821160011461055157928192935f92610546575b50508160011b915f199060031b1c1916175f5560ff90565b015190505f8061052e565b601f198216935f8052805f20915f5b8681106105985750836001959610610580575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610573565b91926020600181928685015181550194019201610560565b5f8052601f60205f20910160051c810190601f830160051c015b8181106105d75750610514565b5f81556001016105ca565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610502565b908151602081105f1461062b575090601f8151116104a4576020815191015160208210610495571790565b6001600160401b03811161040057600154600181811c9116801561072e575b60208210146105e257601f81116106fb575b50602092601f821160011461069a57928192935f9261068f575b50508160011b915f199060031b1c19161760015560ff90565b015190505f80610676565b601f1982169360015f52805f20915f5b8681106106e357508360019596106106cb575b505050811b0160015560ff90565b01515f1960f88460031b161c191690555f80806106bd565b919260206001819286850151815501940192016106aa565b60015f52601f60205f20910160051c810190601f830160051c015b818110610723575061065c565b5f8155600101610716565b90607f169061064a56fe60c08060405260043610156100ae575b50361561001a575f80fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314158061007b575b61005357005b7f38bbd576000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141561004d565b5f3560e01c9081631a27b20114610df85750806324856bc314610d495780633593564c14610c6357806344684dc31461079f5780638021fef71461075c578063817122dc1461071957806384b0196e1461060557806391dd7346146104e2578063d04d79a21461044e578063d0c9f6cb1461040b578063d737d0c7146103c6578063dc4c90d3146103835763fa461e3314610149575f61000f565b3461027d57606060031936011261027d5760243560043560443567ffffffffffffffff811161027d57610180903690600401610e54565b5f831391821580610379575b6103515781810160408282031261027d5781359067ffffffffffffffff821161027d576101ba918301613160565b506020810135916001600160a01b03831680930361027d576101db91613278565b90601790602b8310610329578035968760601c9561020962ffffff8585013560601c9a60481c168a896132cb565b6001600160a01b033391160361030157156102f757508685105b1561023957505050610237935033916133df565b005b91935091939482602b0180602b116102e3578410610281575082821161027d578101910390600160ff1b84101561027d5761023793610278339161317e565b61344a565b5f80fd5b925050507faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6929291925c82116102bb576102379233916133df565b7f739dbe52000000000000000000000000000000000000000000000000000000005f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b9550848710610223565b7f32b13d91000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3b99b53d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f316cf0eb000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f85131561018c565b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760207f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c6001600160a01b0360405191168152f35b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760607fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315c7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5c7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65c906001600160a01b036040519316835260208301526040820152f35b3461027d57602060031936011261027d5760043567ffffffffffffffff811161027d57610513903690600401610e54565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036105dd5761054c916139c0565b908183036105b5575f5b8381106105895761058560405161056e6020826130d3565b5f8152604051918291602083526020830190610eb3565b0390f35b806105af61059a6001938789610ed8565b3560f81c6105a9838787610f17565b916141e4565b01610556565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461027d575f60031936011261027d576106bd6106417f0000000000000000000000000000000000000000000000000000000000000000613796565b61066a7f00000000000000000000000000000000000000000000000000000000000000006138f0565b60206106cb6040519261067d83856130d3565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e0870190610eb3565b908582036040870152610eb3565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061070257505050500390f35b8351855286955093810193928101926001016106f3565b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461027d575f60031936011261027d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b61010060031936011261027d5760043567ffffffffffffffff811161027d576107cc903690600401610e54565b60243567ffffffffffffffff811161027d576107ec903690600401610e82565b91604435608435801515810361027d5760c43567ffffffffffffffff811161027d5761081c903690600401610e54565b9160e435804211610c3b57908891610833896130f6565b61084060405191826130d3565b89815261084c8a6130f6565b601f196020830191013682375f5b8b8110610be25750604051915160208301929183915f5b818110610bc9575050509361097c9693604293836108a06109859b99956109769903601f1981018352826130d3565b5190209115610bb7576001600160a01b036108bf33945b8d369161312a565b60208151910120936040519360208501957f4b503a2e339bf072a489301f3eec7abaefc520266c462796ed9267bbcc6e407c8752604086015260608501528b608085015260643560a08501521660c083015260a43560e08301526101008201526101008152610930610120826130d3565b51902061093b613fcf565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522092369161312a565b906140eb565b90929192614125565b5f1960a43503610b20575b7fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d6064357f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d333014610b12576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610a5b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d5b5f7fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d5f7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d5f7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d005b7f6f5ffb7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b610b1b93610f32565b610a7f565b6001600160a01b038116805f52600260205260405f2060a4355f5260205260ff60405f205416610b8f575f52600260205260405f2060a4355f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055610990565b7f1fb09b80000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b036108bf5f946108b7565b825184528f985060209384019390920191600101610871565b909192939450610bfd610bf6828d8d610f17565b369161312a565b60208151910120908351811015610c275760019160208260051b8601015201908b9493929161085a565b634e487b7160e01b5f52603260045260245ffd5b7f5bf6f916000000000000000000000000000000000000000000000000000000005f5260045ffd5b606060031936011261027d5760043567ffffffffffffffff811161027d57610c8f903690600401610e54565b60243567ffffffffffffffff811161027d57610caf903690600401610e82565b916044354211610c3b57333014610d40576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610d1b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d005b61023793610f32565b604060031936011261027d5760043567ffffffffffffffff811161027d57610d75903690600401610e54565b60243567ffffffffffffffff811161027d57610d95903690600401610e82565b91333014610d40576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610aea57610d1b93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610f32565b3461027d57604060031936011261027d57600435906001600160a01b03821680920361027d576020915f526002825260405f206024355f52825260ff60405f20541615158152f35b35906001600160a01b038216820361027d57565b9181601f8401121561027d5782359167ffffffffffffffff831161027d576020838186019501011161027d57565b9181601f8401121561027d5782359167ffffffffffffffff831161027d576020808501948460051b01011161027d57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90821015610c27570190565b903590601e198136030182121561027d570180359067ffffffffffffffff821161027d5760200191813603831361027d57565b90821015610c2757610f2e9160051b810190610ee4565b9091565b929080820361308f579291905f915b848310610f4f575050505050565b9091929394610f5f848787610ed8565b3592610f6c858285610f17565b979092606097607f8760f81c1695600196602181105f14612ae657601081101561240157600881101561186a57806112fc5750610fae60208701359b876132a0565b95906080880135156112f5577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9c5b610fe889356135e0565b9d918881608052600160ff1b8314611282575b50505b604260a052602b600160ff1b82101561027d5760a0518f908a1061127c575030915b89821161027d576040916001600160a01b035f60805135956110f861108f6110a3856110658b60601c6017608051013560601c62ffffff8183109e60481c16916132cb565b16968a8614611261576401000276a49b5b878b519485938d6020860152606085019060805161318e565b91168b83015203601f1981018352826130d3565b8488519a8b98899788967f128acb080000000000000000000000000000000000000000000000000000000088521660048701528b6024870152604486015216606484015260a0608484015260a4830190610eb3565b03925af1908115611256575f905f9261121a575b61111c935015611213575061317e565b60a05190969081106111635730908060171161027d576080805160170190527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90196610ffe565b50979396929a509794909893604090910135116111eb575b1590816111dc575b50611195575060010191909392610f41565b906111d86040519283927f2c4029e90000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190610eb3565b0390fd5b600160ff1b915016155f611183565b7f39d35496000000000000000000000000000000000000000000000000000000005f5260045ffd5b905061317e565b9150506040823d821161124e575b81611235604093836130d3565b8101031261027d5781602061111c93519101519161110c565b3d9150611228565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d259b611076565b91611020565b601491925010610329576020602491604051928380926370a0823160e01b82523060048301523560601c5afa908115611256575f916112c4575b505f80610ffb565b90506020813d82116112ed575b816112de602093836130d3565b8101031261027d57515f6112bc565b3d91506112d1565b309c610fde565b6001819c929a97939b96999598949c145f14611419575090611323602082013592826132a0565b608083013515611412577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b604061135d85356135e0565b9401357faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d600160ff1b85101561027d5761139b936102788661317e565b9091901561140357506113ad9061317e565b036113db575f7faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d5b61117b565b7fd4e0248e000000000000000000000000000000000000000000000000000000005f5260045ffd5b61140d915061317e565b6113ad565b3091611351565b6002810361146357506113d691604081013591507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c61145c60208301356135e0565b91356136f4565b9394919390929060038103611633575050508135820163ffffffff60208401351683019163ffffffff83351693602080850194860101910110611626577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c92604051926001600160a01b0360208501957f2a2d80d10000000000000000000000000000000000000000000000000000000087521660248501526060604485015260e48401928035601e198236030181121561027d5781016020813591019467ffffffffffffffff821161027d578160071b3603861361027d5781906060608489015252610104860194905f905b80821061160857505050936115bc5f969482946115ca946040896001600160a01b0361158060208e9d01610e40565b1660a4880152013560c48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc85840301606486015261318e565b03601f1981018352826130d3565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131ae565b9161117b565b9091956080808261161b6001948b61321d565b019701920190611551565b633b99b53d5f526004601cfd5b9194939092509060048103611766575061165060208201356135e0565b906001600160a01b038060408301351691351680155f146116b95750479081106116915780611681575b505061117b565b61168a91613a77565b5f8061167a565b7f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b91604051916370a0823160e01b8352306004840152602083602481875afa928315611256575f93611733575b50821061170b57816116fa575b50505061117b565b61170392613f20565b5f80806116f2565b7f675cae38000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d821161175e575b8161174e602093836130d3565b8101031261027d5751915f6116e5565b3d9150611741565b6005810361178d57508060406113d69201359061178660208201356135e0565b903561365a565b6006810361183f57506040810135906001600160a01b036117b160208301356135e0565b913516806117cd57506117c76113d69247613ede565b90613a77565b906040516370a0823160e01b8152306004820152602081602481865afa908115611256575f9161180c575b506113d69361180691613ede565b91613f20565b90506020813d8211611837575b81611826602093836130d3565b8101031261027d57516113d66117f8565b3d9150611819565b7fd76a1e9e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6008819c929a97939b96999598949c145f14611ab45750611890602083013591836135a8565b90608084013515611aad577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b6118c985356135e0565b928215610c27576118d9826135cc565b8360011015610c27576118fb611943916118f5602086016135cc565b90614ae9565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614b07565b948581611a93575b5050505f1982018281116102e35761197461196f6001600160a01b0392858561363d565b6135cc565b1693604051926370a0823160e01b84526001600160a01b038516928360048601526020856024818a5afa948515611256575f95611a56575b50946119bc929160209596613b35565b6024604051809581936370a0823160e01b835260048301525afa918215611256575f92611a22575b5060406119f4929301359261364d565b101561117b577f849eaf98000000000000000000000000000000000000000000000000000000005f5260045ffd5b91506020823d8211611a4e575b81611a3c602093836130d3565b8101031261027d5790519060406119e4565b3d9150611a2f565b92919450946020833d8211611a8b575b81611a73602093836130d3565b8101031261027d5791519194919390916119bc6119ac565b3d9150611a66565b611aa592611aa0856135cc565b6133df565b5f808561194b565b30916118bf565b60098103611d9a5750611ac790826135a8565b608083013515611d93577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b611aff84356135e0565b917f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000955f9560028510611d6b576020820135975f1986018681116102e3579190825b611bb957505050604001358611611b91578215610c27576113d69585611b8c92611aa0856135cc565b613b35565b7f8ab0bc16000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919897505f198901978989116102e357611bdb61196f611bfd9a898961363d565b611bf2611bec61196f8d8b8b61363d565b82614ae9565b8185879d939d614b07565b90604051907f0902f1ac0000000000000000000000000000000000000000000000000000000082526060826004816001600160a01b0387165afa918215611256575f905f93611d1b575b506001600160a01b036dffffffffffffffffffffffffffff8082931694169d169116145f14611d155799905b9980158015611d0d575b611ce55782611c8b91613ead565b916103e88302928084046103e814901517156102e357611caa9161364d565b6103e58102908082046103e514901517156102e357611cc891613ec0565b600181018091116102e3579880156102e3575f1901919082611b63565b7f7b9c8916000000000000000000000000000000000000000000000000000000005f5260045ffd5b508115611c7d565b90611c73565b6dffffffffffffffffffffffffffff8094506001600160a01b039250611d58839260603d8111611d64575b611d5081836130d3565b810190613aff565b50959093505050611c47565b503d611d46565b7f20db8267000000000000000000000000000000000000000000000000000000005f5260045ffd5b3091611af5565b93949193909290600a8103611e815750505063ffffffff60c08301351682019063ffffffff82351690836020808501948401019101106116265760a06115ca5f946115bc86957f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c956040519586946001600160a01b0360208701997f2b67b570000000000000000000000000000000000000000000000000000000008b52166024870152611e4c604487018261321d565b6001600160a01b03611e6060808301610e40565b1660c4870152013560e485015261010061010485015261012484019161318e565b91949390929091600b810361200c575050611ea1602082013591356135e0565b81600160ff1b8103611fdd57504791505b81611ebe57505061117b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f8160048185885af1801561125657611fcd575b50306001600160a01b03831603611f42575b5061167a565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482015290602090829060449082905f905af1801561125657611f9f575b8080611f3c565b611fbf9060203d8111611fc6575b611fb781836130d3565b810190613625565b505f611f98565b503d611fad565b5f611fd7916130d3565b5f611f2a565b471015611eb2577f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b600c810361214357505061202081356135e0565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916370a0823160e01b8352306004840152602083602481855afa928315611256575f9361210f575b50602001358210611691578161208e5750505061117b565b803b1561027d575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528760048401525af18015611256576120ff575b50306001600160a01b038316036120ef575b806116f2565b6120f891613a77565b5f806120e9565b5f612109916130d3565b5f6120d7565b9092506020813d821161213b575b8161212a602093836130d3565b8101031261027d5751916020612076565b3d915061211d565b600d819c939c9b929597989b99949699145f1461232f57508a358b01988935946121756020808d019e8d0301876133d2565b11610329576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c169a935f5b86811015612201578c6001600160a01b036121cb60208f8560071b01016135cc565b16036121d9576001016121a9565b7fe7002877000000000000000000000000000000000000000000000000000000005f5260045ffd5b50989593979694929b919a5098506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b1561027d576040517f0d58b1db000000000000000000000000000000000000000000000000000000008152602060048201526024810184905292839160448301915f905b8082106122b55750505091815f81819503925af18015611256576122a5575b5061117b565b5f6122af916130d3565b5f61229f565b919350916080806001926001600160a01b036122d088610e40565b1681526001600160a01b036122e760208901610e40565b1660208201526001600160a01b0361230160408901610e40565b1660408201526001600160a01b0361231b60608901610e40565b166060820152019401920185939291612280565b80929b93989550600e919a97969450145f1461183f5750604051906370a0823160e01b82526001600160a01b0381351660048301526020826024816001600160a01b0384860135165afa918215611256575f926123cd575b50604001351115806113d65791506040517fa3281672000000000000000000000000000000000000000000000000000000006020820152600481526116026024826130d3565b9091506020813d82116123f9575b816123e8602093836130d3565b8101031261027d5751906040612387565b3d91506123db565b6010819c929a97939b96999598949c145f1461250f575061245a915f9160405193849283927f48c8949100000000000000000000000000000000000000000000000000000000845260206004850152602484019161318e565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561125657612499575061117b565b3d805f833e6124a881836130d3565b81019060208183031261027d5780519067ffffffffffffffff821161027d570181601f8201121561027d5780516124de8161310e565b926124ec60405194856130d3565b8184526020828401011161027d575f928160208094018483015e0101525f61229f565b80929495506011919350145f146125e45750907fffffffff000000000000000000000000000000000000000000000000000000008135167f7ac2ff7b0000000000000000000000000000000000000000000000000000000081036125b95750815f92918392604051928392833781018381520390826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131ae565b7ff801e525000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b601281036128bc57507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c917fffffffff000000000000000000000000000000000000000000000000000000008135167f0c49ccbe0000000000000000000000000000000000000000000000000000000081148015612893575b801561286a575b156125b9575060048101356001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936040517f6352211e000000000000000000000000000000000000000000000000000000008152826004820152602081602481895afa908115611256576001600160a01b039182915f9161284c575b50169116908082149182156127c5575b8215612754575b505015612729575091815f809481946040519384928337810182815203925af1906116026131ae565b7fbb25d4c5000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b909150604051917fe985e9c500000000000000000000000000000000000000000000000000000000835260048301526024820152602081604481885afa908115611256575f916127a7575b505f80612700565b6127bf915060203d8111611fc657611fb781836130d3565b5f61279f565b91506040517f081812fc0000000000000000000000000000000000000000000000000000000081528360048201526020816024818a5afa9081156112565783916001600160a01b03915f9161281e575b501614916126f9565b61283f915060203d8111612845575b61283781836130d3565b810190613a58565b5f612815565b503d61282d565b612864915060203d81116128455761283781836130d3565b5f6126e9565b507f42966c68000000000000000000000000000000000000000000000000000000008114612665565b507ffc6f786500000000000000000000000000000000000000000000000000000000811461265e565b601381036129ad5750505f80916040516001600160a01b0360a060208301937f6276cbbe0000000000000000000000000000000000000000000000000000000085528261290882610e40565b1660248501528261291b60208301610e40565b16604485015262ffffff612931604083016131dd565b166064850152612943606082016131ed565b60020b60848501528261295860808301610e40565b1660a485015201351660c482015260c4815261297560e4826130d3565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131ae565b6014810361183f57507fffffffff000000000000000000000000000000000000000000000000000000008235167fdd46508f0000000000000000000000000000000000000000000000000000000081036125b957508060041161027d57612a24612a1e600319830160048501613278565b90613278565b5f5b818110612a7b575050505f9182914791816040519283928337810184815203916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1906116026131ae565b612a86818385610ed8565b3560f81c8015908115612adb575b8115612ad0575b50612aa857600101612a26565b7f5d1d0f9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b60039150145f612a9b565b600181149150612a94565b90989591996040829c949c999699989598105f14612c2f57506021810361183f575090612b12916139c0565b612b556040959395519460208601967f24856bc300000000000000000000000000000000000000000000000000000000885260406024880152606487019161318e565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc858503016044860152818452602084019160208160051b86010194845f90601e19813603015b848310612bd35750505050505050509181612bc45f9493859403601f1981018352826130d3565b519082305af1906116026131ae565b9091929394959697601f1985820301885288358281121561027d578301906020823592019167ffffffffffffffff811161027d57803603831361027d57612c1f60209283928b9561318e565b9a01980196959493019190612b9d565b949392906040810361183f575081019060208183031261027d5780359067ffffffffffffffff821161027d5701906101a08282031261027d57604051906101a0820182811067ffffffffffffffff82111761307b57604052612c9083610e40565b8252612c9e60208401610e40565b9060208301918252612cb260408501610e40565b60408401908152612cc4888601610e40565b92888501938452608085016080870135815260a086019660a0810135885260c087019460c08201358652612cfa60e08301610e40565b60e08901908152612d0e6101008401613597565b6101008a01908152612d236101208501613597565b916101208b01928352612d396101408601613597565b936101408c0194855261016086013567ffffffffffffffff811161027d5761018091612d66918801613160565b956101608d019687520135958615159081880361027d576101808d0197885251965f91600160ff1b8914612ffc575b505115612ebd575085985b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169b516001600160a01b031697516001600160a01b031698516001600160a01b03169a516001600160a01b03169c51905191516001600160a01b0316925163ffffffff16935163ffffffff16945163ffffffff169551968c3b1561027d576040519d8e9c8d9b8c9b7f7b939232000000000000000000000000000000000000000000000000000000008d5260048d015260248c015260448b015260648a0152608489015260a488015260c487015260e4860152610104850152610124840152610144830152610164820161018090526101848201612ea691610eb3565b03915a945f95f18015611256576122a5575061117b565b88516040517f095ea7b300000000000000000000000000000000000000000000000000000000602082019081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024840181905260448085018d90528452949d949316905f908190612f3b6064866130d3565b84519082855af1612f4a6131ae565b81612fcd575b5080612fc3575b15612f65575b505050612da0565b612fb6612fbb93604051907f095ea7b300000000000000000000000000000000000000000000000000000000602083015260248201525f604482015260448152612fb06064826130d3565b82614a64565b614a64565b5f8080612f5d565b50803b1515612f57565b8051801592508215612fe2575b50505f612f50565b612ff59250602080918301019101613625565b5f80612fda565b9097501561300d5747965b5f612d95565b602460206001600160a01b038b5116604051928380926370a0823160e01b82523060048301525afa908115611256575f9161304a575b5096613007565b90506020813d8211613073575b81613064602093836130d3565b8101031261027d57515f613043565b3d9150613057565b634e487b7160e01b5f52604160045260245ffd5b7fff633a38000000000000000000000000000000000000000000000000000000005f5260045ffd5b60a0810190811067ffffffffffffffff82111761307b57604052565b90601f601f19910116810190811067ffffffffffffffff82111761307b57604052565b67ffffffffffffffff811161307b5760051b60200190565b67ffffffffffffffff811161307b57601f01601f191660200190565b9291926131368261310e565b9161314460405193846130d3565b82948184528183011161027d578281602093845f960137010152565b9080601f8301121561027d5781602061317b9335910161312a565b90565b600160ff1b81146102e3575f0390565b601f8260209493601f1993818652868601375f8582860101520116010190565b3d156131d8573d906131bf8261310e565b916131cd60405193846130d3565b82523d5f602084013e565b606090565b359062ffffff8216820361027d57565b35908160020b820361027d57565b9081602091031261027d575190565b359065ffffffffffff8216820361027d57565b65ffffffffffff613272606080936001600160a01b0361323c82610e40565b1686526001600160a01b0361325360208301610e40565b166020870152836132666040830161320a565b1660408701520161320a565b16910152565b909163ffffffff82351682019263ffffffff8435169260208086019585010191011061162657565b909163ffffffff60608301351682019263ffffffff8435169260208086019585010191011061162657565b906001600160a01b0392838216848416116133ca575b62ffffff9084604051938160208601961686521660408401521660608201526060815261330f6080826130d3565b5190206040517fff00000000000000000000000000000000000000000000000000000000000000602082019081527f000000000000000000000000000000000000000000000000000000000000000060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201929092527f000000000000000000000000000000000000000000000000000000000000000060558201526133c381607581016115bc565b5190201690565b9091906132e1565b919082018092116102e357565b909291906001600160a01b03841630036133ff576133fd935061365a565b565b91926001600160a01b038411613422576001600160a01b036133fd9416926136f4565b7fc4bd89a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b939290602b8210610329578235938460601c92601785013560601c9380851094859760481c62ffffff169061347e926132cb565b6001600160a01b031692845f146040966001600160a01b0380956134db5f9661352e9561357c576401000276a4925b846134c78e51978f9489956020870152606086019161318e565b91168d83015203601f1981018552846130d3565b89519b8c998a9889977f128acb080000000000000000000000000000000000000000000000000000000089521660048801526024870152604486015216606484015260a0608484015260a4830190610eb3565b03925af18015611256575f925f9161354557509192565b9250506040823d604011613574575b81613561604093836130d3565b8101031261027d57602082519201519192565b3d9150613554565b73fffd8963efd1fc6a506488495d951d5263988d25926134ad565b359063ffffffff8216820361027d57565b9160608301358301916135c56020843595818601950301856133d2565b1161032957565b356001600160a01b038116810361027d5790565b6001600160a01b038116600181036136195750507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90565b60020361317b57503090565b9081602091031261027d5751801515810361027d5790565b9190811015610c275760051b0190565b919082039182116102e357565b9091906001600160a01b03168061367557506133fd91613a77565b600160ff1b821461368b575b916133fd92613f20565b9050604051916370a0823160e01b8352306004840152602083602481855afa8015611256575f906136c0575b90925090613681565b506020833d6020116136ec575b816136da602093836130d3565b8101031261027d576133fd92516136b7565b3d91506136cd565b91926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d575f6001600160a01b039384829681608496816040519b8c9a8b997f36c78516000000000000000000000000000000000000000000000000000000008b521660048a01521660248801521660448601521660648401525af180156112565761378c5750565b5f6133fd916130d3565b60ff81146137f55760ff811690601f82116137cd57604051916137ba6040846130d3565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f80548060011c91600182169182156138e6575b6020841083146138d25783855284929081156138955750600114613838575b61317b925003826130d3565b505f80805290917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b81831061387957505090602061317b9282010161382c565b6020919350806001915483858801015201910190918392613861565b6020925061317b9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b82010161382c565b634e487b7160e01b5f52602260045260245ffd5b92607f169261380d565b60ff81146139145760ff811690601f82116137cd57604051916137ba6040846130d3565b506040515f6001548060011c91600182169182156139b6575b6020841083146138d257838552849290811561389557506001146139575761317b925003826130d3565b5060015f90815290917fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b81831061399a57505090602061317b9282010161382c565b6020919350806001915483858801015201910190918392613982565b92607f169261392d565b604081351891606082019363ffffffff6040840135169363ffffffe0601f8601169060608201602086013518179084019260608401359463ffffffff861694641fffffffe0608082019760051b1680915f925b808410613a2b57506080925001019101101761162657565b90916020809163ffffffe0601f60808089890101359b848d18179b88010135011601019301929190613a13565b9081602091031261027d57516001600160a01b038116810361027d5790565b5f80809381935af115613a8657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152fd5b51906dffffffffffffffffffffffffffff8216820361027d57565b9081606091031261027d57613b1381613ae4565b916040613b2260208401613ae4565b92015163ffffffff8116810361027d5790565b9160028210613e85578115610c2757613b4d836135cc565b8260011015610c2757613b69906118f5602086979596016135cc565b50925f198101937ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8201955f90602093601f198501965b888410613bb35750505050505050505050565b613bc161196f85848661363d565b946001600160a01b03613bdb61196f60018801868861363d565b921695604051917f0902f1ac0000000000000000000000000000000000000000000000000000000083526060836004818b5afa91821561125657895f945f94613e3f575b506001600160a01b03806dffffffffffffffffffffffffffff80602496979816971693169416841494855f14613e395791935b604051938480926370a0823160e01b82528d60048301525afa918215611256575f92613e0a575b5080820392811592838015613e02575b611ce557826103e586029586046103e514911417156102e357613cac9084613ead565b916103e882029182046103e81417156102e357613cd292613ccc916133d2565b90613ec0565b9015613dfb575f90915b8b861015613df25790613cfd613d47926118f561196f60028a01888a61363d565b8193917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614b07565b915b9660405190613d588a836130d3565b5f82528b368b840137803b1561027d57613dc6945f8094604051978895869485937f022c0d9f000000000000000000000000000000000000000000000000000000008552600485015260248401526001600160a01b0389166044840152608060648401526084830190610eb3565b03925af191821561125657600192613de2575b50930192613ba0565b5f613dec916130d3565b5f613dd9565b5087905f613d49565b5f91613cdc565b508115613c89565b9091508981813d8311613e32575b613e2281836130d3565b8101031261027d5751905f613c79565b503d613e18565b93613c52565b6dffffffffffffffffffffffffffff955060249394506001600160a01b0386613e76829360603d8111611d6457611d5081836130d3565b50989098979650505050613c1f565b7fae52ad0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b818102929181159184041417156102e357565b8115613eca570490565b634e487b7160e01b5f52601260045260245ffd5b6127108211613ef85761271091613ef491613ead565b0490565b7fdeaa01e6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f9182604492602095604051937fa9059cbb000000000000000000000000000000000000000000000000000000008552600485015260248401525af13d15601f3d1160015f511416171615613f7157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163014806140c2575b1561402a577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526140bc60c0826130d3565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614614001565b815191906041830361411b576141149250602082015190606060408401519301515f1a90614bd0565b9192909190565b50505f9160029190565b60048110156141d05780614137575050565b60018103614167577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361419b57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146141a55750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b929190600b84101561489257600784036144375761420392935061503b565b60208101906142128282615049565b5f93915080614220846135cc565b9261422d60608601614fa8565b6fffffffffffffffffffffffffffffffff811615614420575b60408601916142558388615049565b801515958692509082614415575b50506143ed575f9591949395945b8486106142f457505050505050506080016fffffffffffffffffffffffffffffffff8061429d83614fa8565b1692169182106142ab575050565b6142c56fffffffffffffffffffffffffffffffff91614fa8565b7f8b063d73000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b86985061435461434f6fffffffffffffffffffffffffffffffff9261433161432a8a614324888f9e9c9d9e615049565b9061507f565b9687615359565b94909116936143436080880188610ee4565b929091865f03916151d3565b615432565b98614372575b50600161436789936135cc565b960194939591614271565b61439990670de0b6b3a76400006fffffffffffffffffffffffffffffffff8b169102613ec0565b6143ad876143a7868b615049565b9061363d565b358082116143bb575061435a565b877fa9b7edf7000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7f947446a5000000000000000000000000000000000000000000000000000000005f5260045ffd5b14159050855f614263565b5061443261442d85614c6a565b61518e565b614246565b6006840361452e5761444a929350614f99565b61445660c08201614fa8565b6fffffffffffffffffffffffffffffffff8116156144dd575b6144c061434f60e09261449f6fffffffffffffffffffffffffffffffff61449860a08801614fc5565b921661317e565b906144ae610100870187610ee4565b9290916144bb3689614fd2565b6151d3565b91016fffffffffffffffffffffffffffffffff8061429d83614fa8565b506144ea60a08201614fc5565b156145145760e06144c061434f61450b61442d614506866135cc565b614c6a565b9250505061446f565b60e06144c061434f61450b61442d614506602087016135cc565b600984036147455761454192935061503b565b60208101906145508282615049565b90505f9261456060608401614fa8565b9161456a846135cc565b926fffffffffffffffffffffffffffffffff811615614733575b6040850190826145948388615049565b801515958692509082614728575b50506143ed57949093929493845b61462f575050505050506080016fffffffffffffffffffffffffffffffff806145d883614fa8565b1692169182116145e6575050565b6146006fffffffffffffffffffffffffffffffff91614fa8565b7f12bacdd3000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b8597506fffffffffffffffffffffffffffffffff61469361468961432a9361466c61465e898d9c9a9b9c615049565b96905f198d0197889161507f565b94909116938461467f6080890189610ee4565b93909215906151d3565b600f0b5f0361518e565b986146b3575b50505f196146a788926135cc565b950193929490846145b0565b6146d990670de0b6b3a76400006fffffffffffffffffffffffffffffffff8b1602613ec0565b906146e8816143a7868b615049565b35908183116146f75750614699565b7fe6518043000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b14159050815f6145a2565b5061474061442d84614f27565b614584565b6008841461477c575050505b7f5cda29d7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b614787929350614f99565b61479360c08201614fa8565b6fffffffffffffffffffffffffffffffff811615614817575b6147fa61442d6147f26fffffffffffffffffffffffffffffffff60e0946147d560a08801614fc5565b6147e3610100890189610ee4565b93909216906144bb368a614fd2565b600f0b61317e565b91016fffffffffffffffffffffffffffffffff806145d883614fa8565b5061482460a08201614fc5565b156148675760e06147fa61442d6147f26fffffffffffffffffffffffffffffffff61485c61442d614857602089016135cc565b614f27565b9450505050506147ac565b60e06147fa61442d6147f26fffffffffffffffffffffffffffffffff61485c61442d614857886135cc565b92600c810361491657506148a69192614f14565b906148b081614f27565b918083116148e65750906133fd917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90614da8565b90507f12bacdd3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600f810361499957506149299192614f14565b9061493381614c6a565b918083106149695750906133fd917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90614cd6565b90507f8b063d73000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600b81036149f257506149b0906133fd9293614c52565b156149e7576149e1827f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c92614d83565b91614da8565b6149e1823092614d83565b600e8103614a255750614a19614a0f614a1f926133fd9495614c52565b92829492916135e0565b92614d6f565b91614cd6565b9260108414614a3657505050614751565b6133fd929350614a4c614a5592614a1f92614c52565b929193906135e0565b91614a5f84614c6a565b613ede565b5f806001600160a01b03614a8d93169360208151910182865af1614a866131ae565b9083615451565b8051908115159182614ace575b5050614aa35750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b614ae19250602080918301019101613625565b155f80614a9a565b6001600160a01b0382166001600160a01b038216105f14610f2e5791565b916133c3906001600160a01b03947fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519181602084019460601b16845260601b16603482015260288152614b5e6048826130d3565b5190206115bc604051938492602084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614c47579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611256575f516001600160a01b03811615614c3d57905f905f90565b505f906001905f90565b5050505f9160039190565b90606011611626578035916040602083013592013590565b614c9581307f00000000000000000000000000000000000000000000000000000000000000006150bf565b905f8212614ca1575090565b6001600160a01b03907f4c085bf1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90918015614d6a576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561027d575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af180156112565761378c5750565b505050565b9081614d7f5761317b9150614c6a565b5090565b90600160ff1b8203614d995761317b915061514c565b81614d7f5761317b9150614f27565b5f918315614f0e576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561027d576001600160a01b03604051917fa584119400000000000000000000000000000000000000000000000000000000835216908160048201525f8160248183885af1801561125657614ef9575b5080614eac5750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af1908115614ea05750614e755750565b614e969060203d602011614e99575b614e8e81836130d3565b8101906131fb565b50565b503d614e84565b604051903d90823e3d90fd5b83948360209493614ebc936133df565b6004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af1908115614ea05750614e755750565b614f069194505f906130d3565b5f925f614e2d565b50505050565b9190604011611626576020823592013590565b614f5281307f00000000000000000000000000000000000000000000000000000000000000006150bf565b905f8213614f64575061317b9061317e565b6001600160a01b03907f3351b260000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90610140116116265780350190565b356fffffffffffffffffffffffffffffffff8116810361027d5790565b35801515810361027d5790565b91908260a091031261027d57604051614fea816130b7565b6080615036818395614ffb81610e40565b855261500960208201610e40565b602086015261501a604082016131dd565b604086015261502b606082016131ed565b606086015201610e40565b910152565b9060a0116116265780350190565b903590601e198136030182121561027d570180359067ffffffffffffffff821161027d57602001918160051b3603831361027d57565b9190811015610c275760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618136030182121561027d570190565b6001600160a01b03809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa908115611256575f9161511d575090565b90506020813d602011615144575b81615138602093836130d3565b8101031261027d575190565b3d915061512b565b6001600160a01b03168061515f57504790565b6020602491604051928380926370a0823160e01b82523060048301525afa908115611256575f9161511d575090565b906fffffffffffffffffffffffffffffffff82168092036151ab57565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b909290831561533e576401000276a4905b60405194606086019386851067ffffffffffffffff86111761307b576001600160a01b0397886080956152b9946020986040521515998a8152888101908a82528360408201931683526040519c8d998a997ff3cd914c000000000000000000000000000000000000000000000000000000008b528281511660048c0152828d8201511660248c015262ffffff60408201511660448c0152606081015160020b60648c0152015116608489015251151560a48801525160c4870152511660e485015261012061010485015261012484019161318e565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315611256575f9361530a575b505f130361530457600f0b90565b60801d90565b9092506020813d602011615336575b81615326602093836130d3565b8101031261027d5751915f6152f6565b3d9150615319565b73fffd8963efd1fc6a506488495d951d5263988d25906151e4565b905f6080604051615369816130b7565b8281528260208201528260408201528260608201520152615389826135cc565b6001600160a01b038216916001600160a01b0382168084105f1461542057506001600160a01b03905b1680921492602081013562ffffff811680910361027d576040820135918260020b80930361027d5760600135926001600160a01b03841680940361027d576001600160a01b039060405195615406876130b7565b865216602085015260408401526060830152608082015291565b9150506001600160a01b0382916153b2565b5f81600f0b126151ab576fffffffffffffffffffffffffffffffff1690565b9061548e575080511561546657805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806154d4575b61549f575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561549756fea164736f6c634300081a000a'; + return hex'6102a0806040523461041d57610140816167248038038091610021828561043c565b83398101031261041d576040519061014082016001600160401b03811183821017610409576040526100528161045f565b82526100606020820161045f565b602083019081526100736040830161045f565b90604084019182526100876060840161045f565b91606085019283526080840151946080810195865260a08501519360a082019485526100b560c0870161045f565b9660c083019788526100c960e0880161045f565b958660e08501526100f16101206100e36101008b0161045f565b998a6101008801520161045f565b98896101208601526040519761010689610421565b6001600160a01b03908116895298891660208901908152905194519651604051919991979082169695821695911661013d88610421565b8752602087019586525192519151905160405190936001600160a01b039384169316608082016001600160401b0381118382101761040957604052815260208101928352604081019182526060810193845260405161019d60408261043c565b600f815260208101906e2ab734bb32b939b0b62937baba32b960891b8252604051916101ca60408461043c565b600183526020830191601960f91b83526101e381610473565b610120526101f084610609565b61014052519020918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261025960c08261043c565b5190206080523060c052516001600160a01b0390811661016052905161018052905181166101a05290516101c0526101e09190915290518116610200529051811661022052905181166102405290518116610260521661028052604051615fe29081610742823960805181614755015260a05181614812015260c05181614726015260e051816147a4015261010051816147ca0152610120518161055f0152610140518161058b01526101605181818161329e0152818161346a01526142c70152610180518181816132c00152818161344901526142a601526101a0518161204f01526101c051816120a201526101e0518181816106760152818161088d0152818161142b01528181611add01528181612ce101528181614ffa015281816150710152818161516b015281816152bb01528181615c350152615da4015261020051818181611a7b01528181612fd90152613129015261022051818181610f5a01528181612eab015261387e0152610240518181816104cb0152818161136c01526129b9015261026051818181610805015261148a015261028051818181610488015281816125dd01526127280152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761040957604052565b601f909101601f19168101906001600160401b0382119082101761040957604052565b51906001600160a01b038216820361041d57565b908151602081105f146104ed575090601f8151116104ad57602081519101516020821061049e571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b038111610409575f54600181811c911680156105ff575b60208210146105eb57601f81116105b9575b50602092601f821160011461055a57928192935f9261054f575b50508160011b915f199060031b1c1916175f5560ff90565b015190505f80610537565b601f198216935f8052805f20915f5b8681106105a15750836001959610610589575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061057c565b91926020600181928685015181550194019201610569565b5f8052601f60205f20910160051c810190601f830160051c015b8181106105e0575061051d565b5f81556001016105d3565b634e487b7160e01b5f52602260045260245ffd5b90607f169061050b565b908151602081105f14610634575090601f8151116104ad57602081519101516020821061049e571790565b6001600160401b03811161040957600154600181811c91168015610737575b60208210146105eb57601f8111610704575b50602092601f82116001146106a357928192935f92610698575b50508160011b915f199060031b1c19161760015560ff90565b015190505f8061067f565b601f1982169360015f52805f20915f5b8681106106ec57508360019596106106d4575b505050811b0160015560ff90565b01515f1960f88460031b161c191690555f80806106c6565b919260206001819286850151815501940192016106b3565b60015f52601f60205f20910160051c810190601f830160051c015b81811061072c5750610665565b5f815560010161071f565b90607f169061065356fe60806040526004361015610022575b3615610018575f80fd5b610020611a71565b005b5f3560e01c80631a27b201146100f157806324856bc3146100ec5780633593564c146100e757806344684dc3146100e25780638021fef7146100dd578063817122dc146100d857806384b0196e146100d357806391dd7346146100ce578063d04d79a2146100c9578063d0c9f6cb146100c4578063d737d0c7146100bf578063dc4c90d3146100ba5763fa461e330361000e576108b1565b61086e565b610829565b6107e6565b610752565b61063b565b610547565b6104ac565b610469565b6103cd565b6102cb565b6101c6565b610118565b6001600160a01b0381160361010757565b5f80fd5b3590610116826100f6565b565b3461010757604060031936011261010757600435610135816100f6565b6001600160a01b0360243591165f52600260205260405f20905f52602052602060ff60405f2054166040519015158152f35b9181601f840112156101075782359167ffffffffffffffff8311610107576020838186019501011161010757565b9181601f840112156101075782359167ffffffffffffffff8311610107576020808501948460051b01011161010757565b60406003193601126101075760043567ffffffffffffffff8111610107576101f2903690600401610167565b60243567ffffffffffffffff811161010757610212903690600401610195565b913330146102c2576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c1661029a5761027593337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610cc9565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d005b7f6f5ffb7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b61002093610cc9565b60606003193601126101075760043567ffffffffffffffff8111610107576102f7903690600401610167565b60243567ffffffffffffffff811161010757610317903690600401610195565b916044354211610383573330146102c2576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c1661029a5761027593337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610cc9565b7f5bf6f916000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015150361010757565b60843590610116826103ab565b3590610116826103ab565b6101006003193601126101075760043567ffffffffffffffff8111610107576103fa903690600401610167565b9060243567ffffffffffffffff81116101075761041b903690600401610195565b9260443560643561042a6103b5565b9060a4359260c4359767ffffffffffffffff891161010757610453610020993690600401610167565b97909660e4359961156f565b5f91031261010757565b34610107575f6003193601126101075760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610107575f6003193601126101075760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90602080835192838152019201905f5b8181106105315750505090565b8251845260209384019390920191600101610524565b34610107575f600319360112610107576105f56105837f0000000000000000000000000000000000000000000000000000000000000000613c6a565b6106236105af7f0000000000000000000000000000000000000000000000000000000000000000613d6b565b6106036105ba611872565b916040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e08701906104ef565b9085820360408701526104ef565b904660608501523060808501525f60a085015283820360c0850152610514565b0390f35b9060206106389281815201906104ef565b90565b346101075760206003193601126101075760043567ffffffffffffffff81116101075761066c903690600401610167565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361072a576106a591613e23565b90818303610702575f5b8381106106d6576106236040516106c7602082611809565b5f815260405191829182610627565b806106fc6106e76001938789610c53565b3560f81c6106f6838787610c97565b916149ae565b016106af565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610107575f6003193601126101075760607fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315c7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5c7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65c906001600160a01b036040519316835260208301526040820152f35b34610107575f6003193601126101075760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610107575f6003193601126101075760207f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c6001600160a01b0360405191168152f35b34610107575f6003193601126101075760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101075760606003193601126101075760243560043560443567ffffffffffffffff8111610107576108e8903690600401610167565b91905f821392831580610ba2575b610b7a576001600160a01b03946109399361092161091684860186611946565b969250991695611f12565b92909161092e8484613ebb565b999198908a8a611fc8565b6001600160a01b0333911603610b52578015610b35576001600160a01b0389166001600160a01b038916109882995b15610980575050505050505061002093503391612104565b90919293949598999750610995866042111590565b15610a5f575086516109e7575b505050946109c66109b96109c1936100209861218a565b9390926121be565b6119ca565b9480156109df576109d690611a56565b945b3390612256565b505f946109d8565b610a00610a0a938a93610a05935f14610a5857506119ca565b6119df565b611a24565b610a148686611a42565b51808210610a2257806109a2565b7f382ec7a2000000000000000000000000000000000000000000000000000000005f52600487905260245260445260645ffd5b5ffd5b90506119ca565b969450909192507faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6929796975c8711610b0d578351610aa8575b5050505061002093503391612104565b86610a05610a00610acb958b95610ac5955f14610a5857506119ca565b92611a42565b51808210610ada578080610a98565b7f382ec7a2000000000000000000000000000000000000000000000000000000005f52600486905260245260445260645ffd5b7f739dbe52000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0388166001600160a01b038a1610988399610968565b7f32b13d91000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f316cf0eb000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f8513156108f6565b929190333014610c36576001600160a01b037f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c1661029a57610c1193337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610cc9565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d565b61011693610cc9565b634e487b7160e01b5f52603260045260245ffd5b90821015610c5f570190565b610c3f565b903590601e1981360301821215610107570180359067ffffffffffffffff82116101075760200191813603831361010757565b90821015610c5f57610cae9160051b810190610c64565b9091565b6040906106389392815281602082015201906104ef565b909392848103611547575f5b858110610ce457505050509050565b610cef818785610c53565b35610cfb828487610c97565b6060929160019160f884901c607f1660218110156114b557601081101561131c57600881101561105e5780610df75750610d4582610d3c83610d9195611f9d565b92909382612dbf565b92909360808301355f14610df0577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c925b604081013590610d8c60208201359135612f75565b613a20565b159081610de1575b50610da75750600101610cd5565b90610ddd6040519283927f2c4029e900000000000000000000000000000000000000000000000000000000845260048401610cb2565b0390fd5b600160ff1b161590505f610d99565b3092610d77565b60018103610e695750610e1182610d3c83610e5d95611f9d565b92909360808301355f14610e62577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c925b604081013590610e5860208201359135612f75565b61391f565b610d91565b3092610e43565b60028103610eba575050610e5d90610e9f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90565b90604081013591610eb36020830135612f75565b9135613872565b9192909160038103610f8b5750505f92935090610f4d610edb849383611f72565b909190610f3f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9160405194859360208501977f2a2d80d10000000000000000000000000000000000000000000000000000000089528035019060248601611d84565b03601f198101835282611809565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190610f85611bcd565b91610d91565b9092915060048103610fbe575080610fa96020610e5d930135612f75565b6001600160a01b0360408301351691356137be565b60058103610fe55750806040610e5d92013590610fde6020820135612f75565b9035613733565b6006810361100c5750806040610e5d920135906110056020820135612f75565b90356136bd565b600781036110335750806040610e5d9201359061102c6020820135612f75565b90356135ef565b7fd76a1e9e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b909190600881036110d85750818161107c610e5d9461108594612d9f565b93909282612dbf565b92909360808301355f146110d1577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c925b6040810135906110cc60208201359135612f75565b61340d565b30926110b7565b600981036111465750818161107c610e5d946110f394612d9f565b92909360808301355f1461113f577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c925b60408101359061113a60208201359135612f75565b613280565b3092611125565b909290600a81036111c65750505f92935081611166610f4d928594611f47565b929091610f3f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9460405194859360208501977f2b67b57000000000000000000000000000000000000000000000000000000000895260248601611d32565b909290600b81036111eb5750610e5d91506111e660208201359135612f75565b613106565b600c810361120d5750610e5d915061120860208201359135612f75565b612fba565b600d810361124c5750610e5d9161122391612d82565b907f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c91612e94565b9092509050600e810361103357506040516370a0823160e01b81526001600160a01b03823516600482015290602082806024810103816001600160a01b0384860135165afa918215611317575f926112e4575b5060400135111580610e5d576040517fa3281672000000000000000000000000000000000000000000000000000000006020820152909250610f858160248101610f3f565b60409192506113099060203d8111611310575b6113018183611809565b810190611cac565b919061129f565b503d6112f7565b611cbb565b90919060108103611332575090610e5d91612c92565b939450929091506011810361139757505f9190816113508493612c45565b61135f60405180938193611bfc565b0390826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190610f85611bcd565b601281036113d057505f918291906113507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c8261294f565b601381036114565750505f809160405161141e81610f3f60208201947f6276cbbe00000000000000000000000000000000000000000000000000000000865260a08101359060248401611c21565b5190826001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190610f85611bcd565b6014810361103357505f91829161146d81836127dd565b479161147e60405180938193611bfc565b03916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190610f85611bcd565b939490939192604083101561152d57505060218103611033575061151e610f3f6114e15f948594613e23565b60409593959491945194859360208501977f24856bc300000000000000000000000000000000000000000000000000000000895260248601611b25565b519082305af190610f85611bcd565b9290949391604081145f14611033575090610e5d916125a5565b7fff633a38000000000000000000000000000000000000000000000000000000005f5260045ffd5b95909698929a999791978042116103835761158c8c9a9b9c611e49565b5f5b8b81106117a35750868661164e61165e958f611664999896610f3f918f8f6115dc906116569a6040516115c981610f3f602082018095611e7a565b519020961561179c5733925b36916118a9565b6020815191012097604051978896602088019a8b9360e09591989796936001600160a01b039361010087019a7f4b503a2e339bf072a489301f3eec7abaefc520266c462796ed9267bbcc6e407c885260208801526040870152606086015260808501521660a083015260c08201520152565b519020613c13565b9236916118a9565b90613c54565b5f1988036116e5575b6116dd97507fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d610bac565b610116611ea7565b61171b61171489611707846001600160a01b03165f52600260205260405f2090565b905f5260205260405f2090565b5460ff1690565b6117745761176f6117446116dd99611707846001600160a01b03165f52600260205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b61166d565b7f1fb09b80000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f926115d5565b806117b88d9f9e9d6001936115d5918f610c97565b602081519101206117c98285611a42565b52019c9a9b9c61158e565b634e487b7160e01b5f52604160045260245ffd5b60a0810190811067ffffffffffffffff82111761180457604052565b6117d4565b90601f601f19910116810190811067ffffffffffffffff82111761180457604052565b604051906101166101a083611809565b60405190610116606083611809565b6040519061011660a083611809565b67ffffffffffffffff81116118045760051b60200190565b60405190611881602083611809565b5f808352366020840137565b67ffffffffffffffff811161180457601f01601f191660200190565b9291926118b58261188d565b916118c36040519384611809565b829481845281830111610107578281602093845f960137010152565b9080601f8301121561010757816020610638933591016118a9565b9291906119068161185a565b936119146040519586611809565b602085838152019160051b810192831161010757905b82821061193657505050565b813581526020918201910161192a565b60808183031261010757803567ffffffffffffffff8111610107578261196d9183016118df565b92602082013561197c816100f6565b92604083013567ffffffffffffffff811161010757830181601f82011215610107576060918160206119b0933591016118fa565b92013590565b634e487b7160e01b5f52601160045260245ffd5b600160ff1b81146119da575f0390565b6119b6565b906ec097ce7bc90715b34b9f10000000008202918083046ec097ce7bc90715b34b9f100000000014901517156119da57565b818102929181159184041417156119da57565b8115611a2e570490565b634e487b7160e01b5f52601260045260245ffd5b8051821015610c5f5760209160051b010190565b905f1982019182116119da57565b919082039182116119da57565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633141580611ad2575b611aaa57565b7f38bbd576000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016331415611aa4565b601f8260209493601f1993818652868601375f8582860101520116010190565b939190611b3a91604086526040860191611b05565b926020818503910152808352602083019060208160051b85010193835f91601e1982360301905b848410611b72575050505050505090565b90919293949596601f19828203018752873583811215610107578401906020823592019167ffffffffffffffff811161010757803603831361010757611bbe6020928392600195611b05565b99019701959401929190611b61565b3d15611bf7573d90611bde8261188d565b91611bec6040519384611809565b82523d5f602084013e565b606090565b908092918237015f815290565b62ffffff81160361010757565b8060020b0361010757565b9092916001600160a01b0360a091611ca6608060c0860197848135611c45816100f6565b168752846020820135611c57816100f6565b16602088015262ffffff6040820135611c6f81611c09565b1660408801526060810135611c8381611c16565b60020b60608801520135611c96816100f6565b6001600160a01b03166080860152565b16910152565b90816020910312610107575190565b6040513d5f823e3d90fd5b359065ffffffffffff8216820361010757565b65ffffffffffff611ca6606080936001600160a01b038135611cfa816100f6565b1686526001600160a01b036020820135611d13816100f6565b16602087015283611d2660408301611cc6565b16604087015201611cc6565b60a061063895936001600160a01b0361010094168352611d556020840182611cd9565b6001600160a01b036080820135611d6b816100f6565b1682840152013560c08201528160e08201520191611b05565b92906001600160a01b0390959492951683526060602084015260c08301928535601e19873603018112156101075786016020813591019467ffffffffffffffff8211610107578160071b360386136101075781906060808501525260e0820194905f5b818110611e2b57505050604086611e17611e076020610638999a0161010b565b6001600160a01b03166080850152565b013560a08201526040818503910152611b05565b90919560808082611e3e6001948b611cd9565b019701929101611de7565b90611e538261185a565b611e606040519182611809565b828152601f19611e70829461185a565b0190602036910137565b80516020909101905f5b818110611e915750505090565b8251845260209384019390920191600101611e84565b5f7fd317c76a4357223a1868125ee857a1f31cabfcec288f6cdd0ea8c52b6a71ee315d5f7fa42de8dec63499ed8713dc6815ea14006a1f8e80e1664c66e3beb461bb65b0da5d5f7f17350132762f24cc4b86e10621ea1e0b5c33483a51cca86a1b11e7ed029b6eb65d565b909163ffffffff82351682019263ffffffff84351692602080860195850101910110611f3a57565b633b99b53d5f526004601cfd5b909163ffffffff60c08301351682019263ffffffff84351692602080860195850101910110611f3a57565b909163ffffffff60208301351682019263ffffffff84351692602080860195850101910110611f3a57565b909163ffffffff60608301351682019263ffffffff84351692602080860195850101910110611f3a57565b6120e291610638936001600160a01b0382166001600160a01b038416116120ee575b62ffffff906001600160a01b03604051938160208601961686521660408401521660608201526060815261201f608082611809565b5190206040517fff00000000000000000000000000000000000000000000000000000000000000602082019081527f000000000000000000000000000000000000000000000000000000000000000060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201929092527f000000000000000000000000000000000000000000000000000000000000000060558201526120d38160758101610f3f565b5190206001600160a01b031690565b6001600160a01b031690565b909190611fea565b90601482018092116119da57565b909291906001600160a01b0384163003612122576101169350613733565b91926001600160a01b038411612145576001600160a01b03610116941692613872565b7fc4bd89a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b909291928360041161010757831161010757600401916003190190565b9190918260171161010757601701917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90190565b600160ff1b8110156101075790565b9594936001600160a01b036121f1606095936122059560808b5260808b0191611b05565b921660208801528682036040880152610514565b930152565b9190826040910312610107576020825192015190565b919360a09361063896956001600160a01b03809416855215156020850152604084015216606082015281608082015201906104ef565b929193959490946122678386613ebb565b97915f949194506001600160a01b0381166001600160a01b038a161094859961228f92611fc8565b6001600160a01b03166001600160a01b031694845f14604098610f3f5f96612304956122cf9461234c576401000276a49e5b8d51968795602087016121cd565b8751998a97889687957f128acb0800000000000000000000000000000000000000000000000000000000875260048701612220565b03925af18015611317575f925f9161231b57509192565b905061234091925060403d604011612345575b6123388183611809565b81019061220a565b919092565b503d61232e565b73fffd8963efd1fc6a506488495d951d5263988d259e6122c1565b919394906123758486613ebb565b96915f939193506001600160a01b0388166001600160a01b0382161093849861239d92611fc8565b6001600160a01b03166001600160a01b031693835f14966122cf5f94610f3f866123049560409c61234c576401000276a49e8d51968795602087016121cd565b63ffffffff81160361010757565b3590610116826123dd565b6020818303126101075780359067ffffffffffffffff821161010757016101a0818303126101075761242661182c565b916124308261010b565b835261243e6020830161010b565b602084015261244f6040830161010b565b60408401526124606060830161010b565b60608401526080820135608084015260a082013560a084015260c082013560c084015261248f60e0830161010b565b60e08401526124a161010083016123eb565b6101008401526124b461012083016123eb565b6101208401526124c761014083016123eb565b6101408401526101608201359167ffffffffffffffff8311610107576124f5610180926125019483016118df565b610160850152016103c2565b61018082015290565b989296612589966101809b966001600160a01b036106389f9e9a978d6040836125979f989b8161256d9b8161257b9f168652166020850152169101521660608d015260808c015260a08b015260c08a015260e08901906001600160a01b03169052565b63ffffffff16610100870152565b63ffffffff16610120850152565b63ffffffff16610140830152565b8161016082015201906104ef565b6125b1918101906123f6565b6080810151905f600160ff1b8314612753575b61018082015115612702575081905b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169161260f82516001600160a01b031690565b60208301516001600160a01b031660408401516001600160a01b03169161264060608601516001600160a01b031690565b9460a08101519060c081015161266060e08301516001600160a01b031690565b61010083015163ffffffff169061267f61012085015163ffffffff1690565b9261016061269561014087015163ffffffff1690565b950151958c3b15610107576040517f7b9392320000000000000000000000000000000000000000000000000000000081529d8e9c8d9b8c9b6126da9b60048e0161250a565b03915a945f95f18015611317576126ee5750565b806126fc5f61011693611809565b8061045f565b9061274e8361271e6120e260408501516001600160a01b031690565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690613f06565b6125d3565b9150612763610180820151151590565b1561276f5747916125c4565b6127896120e26120e260408401516001600160a01b031690565b6040516370a0823160e01b815230600482015290602090829060249082905afa908115611317575f916127be575b50916125c4565b6127d7915060203d602011611310576113018183611809565b5f6127b7565b80357fdd46508f000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821603612902575061283a826128409361283a9361216d565b90611f12565b5f5b81811061284e57505050565b61289461288e612888612862848688610c53565b357fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b80159081156128f7575b81156128ec575b81156128e1575b506128b957600101612842565b7f5d1d0f9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b60039150145f6128ac565b6001811491506128a5565b60048114915061289e565b7ff801e525000000000000000000000000000000000000000000000000000000005f527fffffffff000000000000000000000000000000000000000000000000000000001660045260245ffd5b7fffffffff000000000000000000000000000000000000000000000000000000008135167f0c49ccbe0000000000000000000000000000000000000000000000000000000081148015612c1c575b8015612bf3575b15612bc8575060040135906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051917f6352211e00000000000000000000000000000000000000000000000000000000835260208380612a1687600483019190602083019252565b0381855afa928315611317575f93612ba7575b506001600160a01b038116916001600160a01b0384168314928315612b1e575b508215612a89575b50501590505b612a5e5750565b7fbb25d4c5000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517fe985e9c50000000000000000000000000000000000000000000000000000000081526001600160a01b0394851660048201529190931660248201529160209150829060449082905afa801561131757612a57915f91612aef575b505f80612a51565b612b11915060203d602011612b17575b612b098183611809565b8101906130f1565b5f612ae7565b503d612aff565b6040517f081812fc0000000000000000000000000000000000000000000000000000000081526004810187905291935090602081602481875afa8015611317576001600160a01b03915f91612b78575b501614915f612a49565b612b9a915060203d602011612ba0575b612b928183611809565b81019061402c565b5f612b6e565b503d612b88565b612bc191935060203d602011612ba057612b928183611809565b915f612a29565b7ff801e525000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b507f42966c680000000000000000000000000000000000000000000000000000000081146129a4565b507ffc6f786500000000000000000000000000000000000000000000000000000000811461299d565b357fffffffff00000000000000000000000000000000000000000000000000000000167f853d0085000000000000000000000000000000000000000000000000000000008101612bc85750565b5f90612cd49260405193849283927f48c89491000000000000000000000000000000000000000000000000000000008452602060048501526024840191611b05565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561131757612d105750565b3d805f833e612d1f8183611809565b8101906020818303126101075780519067ffffffffffffffff8211610107570181601f82011215610107578051612d558161188d565b92612d636040519485611809565b81845260208284010111610107575f928160208094018483015e010152565b918235830191602083359481850194038560051b010111611f3a57565b916060830135830191602083359481850194038560051b010111611f3a57565b9160a0830135830191602083359481850194038560051b010111611f3a57565b9190811015610c5f5760071b0190565b35610638816100f6565b60208082528101839052604001915f5b818110612e165750505090565b9091926080806001926001600160a01b038735612e32816100f6565b1681526001600160a01b036020880135612e4b816100f6565b1660208201526001600160a01b036040880135612e67816100f6565b1660408201526001600160a01b036060880135612e83816100f6565b166060820152019401929101612e09565b90915f5b838110612f205750506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b1561010757612f0f925f92836040518096819582947f0d58b1db00000000000000000000000000000000000000000000000000000000845260048401612df9565b03925af18015611317576126ee5750565b612f33612f2e828686612ddf565b612def565b6001600160a01b03808416911603612f4d57600101612e98565b7fe7002877000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b03811660018103612fae5750507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90565b60020361063857503090565b6040516370a0823160e01b815230600482015290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690602083602481855afa928315611317575f936130d0575b5082106130a8578161302257505050565b803b15610107575f60405180927f2e1a7d4d00000000000000000000000000000000000000000000000000000000825281838161306788600483019190602083019252565b03925af1801561131757613094575b50306001600160a01b0383160361308b575050565b61011691614041565b806126fc5f6130a293611809565b5f613076565b7f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b6130ea91935060203d602011611310576113018183611809565b915f613011565b908160209103126101075751610638816103ab565b90600160ff1b8103613227575047905b8161311f575050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b15610107576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f8160048185885af1801561131757613213575b50306001600160a01b038316036131a2575b505050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482015290602090829060449082905f905af18015611317576131fb575b50565b6131f89060203d602011612b1757612b098183611809565b806126fc5f61322193611809565b5f61318b565b9047821115613116577f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b9015610c5f5790565b9060011015610c5f5760200190565b9190811015610c5f5760051b0190565b92909391969594600283106133e557861515806133d1575b6133a9577f0000000000000000000000000000000000000000000000000000000000000000977f0000000000000000000000000000000000000000000000000000000000000000985f96995f1986018681116119da579190825b61334757505050881161331f57610116978561331a92613315612f2e8787613258565b612104565b614124565b7f8ab0bc16000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919a97505f198b018b81116119da576133908c61337e61336c613397948b8b613270565b3591613377836100f6565b8a8a613270565b3590613389826100f6565b8486614c8c565b919a614d5c565b9a80156119da575f19019190826132f2565b7f609328e8000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f1983018381116119da57871415613298565b7fae52ad0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b92949690959196600285106133e557811515806135dd575b6133a95761348e613439612f2e8789613258565b613446612f2e888a613261565b907f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006145bd565b9687816135c4575b5050506134b56120e26120e2612f2e6134ae88611a56565b888a613270565b6040516370a0823160e01b81526001600160a01b038516600482015296909290602088602481875afa9586156113175761352d985f97613596575b50908561350294939260209899614124565b60405180809681946370a0823160e01b8352600483019190916001600160a01b036020820193169052565b03915afa801561131757613548925f91613577575b50611a64565b1061354f57565b7f849eaf98000000000000000000000000000000000000000000000000000000005f5260045ffd5b613590915060203d602011611310576113018183611809565b5f613542565b60209750613502949392916135b888928a3d8c11611310576113018183611809565b985091929394506134f0565b6135d592613315612f2e898b613258565b5f8087613496565b506135e785611a56565b821415613425565b670de0b6b3a76400008311613695576001600160a01b031680613631575061362b61361d6101169347611a11565b670de0b6b3a7640000900490565b90614041565b6040516370a0823160e01b8152306004820152909190602081602481865afa90811561131757610116946136709261361d925f91613676575b50611a11565b916145d4565b61368f915060203d602011611310576113018183611809565b5f61366a565b7f90f5ebeb000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0316806136d9575061362b6101169247614683565b6040516370a0823160e01b8152306004820152909190602081602481865afa9384156113175761011694613670925f91613714575b50614683565b61372d915060203d602011611310576113018183611809565b5f61370e565b9091906001600160a01b03168061374e575061011691614041565b600160ff1b8214613764575b91610116926145d4565b6040516370a0823160e01b815230600482015292909150602083602481855afa801561131757610116935f9161379f575b509190925061375a565b6137b8915060203d602011611310576113018183611809565b5f613795565b9091906001600160a01b0316806137e15750479081106130a8578061308b575050565b6040516370a0823160e01b815230600482015290929091602083602481875afa928315611317575f93613851575b508210613829578161382057505050565b610116926145d4565b7f675cae38000000000000000000000000000000000000000000000000000000005f5260045ffd5b61386b91935060203d602011611310576113018183611809565b915f61380f565b91926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b15610107575f6001600160a01b039384829681608496816040519b8c9a8b997f36c78516000000000000000000000000000000000000000000000000000000008b521660048a01521660248801521660448601521660648401525af180156113175761390a5750565b806139165f8093611809565b80031261010757565b9492909695939193861515806139f6575b6139ce5761394661394c916139709836916118fa565b946146ea565b835180156139c65761395d90611a56565b945b61396b6109c1896121be565b612256565b909190156139b75750613982906119ca565b0361398f576101166146c5565b7fd4e0248e000000000000000000000000000000000000000000000000000000005f5260045ffd5b6139c191506119ca565b613982565b505f9461395f565b7f383ef61c000000000000000000000000000000000000000000000000000000005f5260045ffd5b50613a0a613a05601789611a11565b6120f6565b831415613930565b5f1981146119da5760010190565b97939795909192949587151596878098613bfc575b6139ce578998600160ff1b8514613b93575b909950879391965f92808b8a613a5b611872565b9e8f90613aa593613a97935b613a7b613a75836042111590565b986121be565b908815613b895750613a8f30925b8a61470e565b929091612367565b90919015610a5857506119ca565b96613b30575b5015613af6573099613abc9161218a565b9190978892809c8795613ace90613a12565b9c8d95613aa594613a8f613a97959e50509c9e509495969290919e8f90928e9a95938e613a67565b505050509350935093505010613b0857565b7f39d35496000000000000000000000000000000000000000000000000000000005f5260045ffd5b613b3d90610a05886119df565b613b48858588613270565b35808210613b565750613aab565b7fb429f374000000000000000000000000000000000000000000000000000000005f52600486905260245260445260645ffd5b613a8f9092613a89565b9350976120e26120e2613ba69289614f4a565b6040516370a0823160e01b815230600482015298906020908a9060249082905afa8015611317578a995f91613bdd575b5093613a47565b613bf6915060203d602011611310576113018183611809565b5f613bd6565b50613c0b613a0560178b611a11565b8a1415613a35565b604290613c1e61471c565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b61063891613c6191614838565b90929192614890565b60ff8114613c7b5761063890614957565b506040515f80548060011c91600182168015613d61575b602084108114613d4d5783855284926020840191908115613d165750600114613cc3575b5061063892500382611809565b5f80805291507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b848310613cff57506106389350015f613cb6565b805482840152859350602090920191600101613ceb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682525061063893151560051b0190505f613cb6565b634e487b7160e01b5f52602260045260245ffd5b92607f1692613c92565b60ff8114613d7c5761063890614957565b506040515f6001548060011c91600182168015613e19575b602084108114613d4d5783855284926020840191908115613d165750600114613dc4575061063892500382611809565b60015f90815291507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b848310613e0257506106389350015f613cb6565b805482840152859350602090920191600101613dee565b92607f1692613d94565b604081351891606082019363ffffffff6040840135169363ffffffe0601f8601169060608201602086013518179084019260608401359463ffffffff861694641fffffffe0608082019760051b1680915f925b808410613e8e575060809250010191011017611f3a57565b90916020809163ffffffe0601f60808089890101359b848d18179b88010135011601019301929190613e76565b90602b11613ede57803591601762ffffff8460601c9460481c1692013560601c90565b7f3b99b53d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03841660248301526044808301959095529381529192613f8b90613f5d606485611809565b5f806001600160a01b0385169286519082855af190613f7a611bcd565b82613ffa575b5081613ff357501590565b613f9457505050565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208201526001600160a01b0390931660248401525f604484015261011692613fee90613fe88160648101610f3f565b82614c07565b614c07565b3b15919050565b80519192508115918215614012575b5050905f613f80565b61402592506020809183010191016130f1565b5f80614009565b908160209103126101075751610638816100f6565b5f80809381935af11561405057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152fd5b51906dffffffffffffffffffffffffffff8216820361010757565b90816060910312610107576140dd816140ae565b9160406140ec602084016140ae565b920151610638816123dd565b9061063894936080936001600160a01b03928452602084015216604082015281606082015201906104ef565b9493929361414b614138612f2e8489613258565b614145612f2e858a613261565b90614df0565b50915f198101957ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe820194831515985f955b898710614191575050505050505050505050565b61419f612f2e888785613270565b936141b1612f2e60018a018886613270565b6040517f0902f1ac00000000000000000000000000000000000000000000000000000000815290956001600160a01b038316606083600481845afa928315611317575f905f9461456d575b506001600160a01b036dffffffffffffffffffffffffffff80829316951693169516851493845f1461455f576040516370a0823160e01b81526001600160a01b039091166004820152919460209083908180602481015b03915afa978815611317578f61427b8f9a978f958e9988915f91614541575b50039687614e0e565b9515614538578c8b5f97955b82101561452a576142a3612f2e6142eb9260028501908d613270565b847f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614e69565b9890985b9b83614514575b5050505f14614493576040516370a0823160e01b81526001600160a01b038781166004830152909591169290602086602481875afa958615611317575f96614473575b50614342611872565b92803b15610107575f92838993614388604051978896879586947f022c0d9f000000000000000000000000000000000000000000000000000000008652600486016140f8565b03925af180156113175761445f575b506040516370a0823160e01b81526001600160a01b038516600482015290602090829060249082905afa928315611317576143ec936ec097ce7bc90715b34b9f1000000000925f91614441575b500302611a24565b6143f788888c613270565b3580821061440e5750506001905b9601959261417d565b7f65d564a5000000000000000000000000000000000000000000000000000000005f52600489905260245260445260645ffd5b614459915060203d8111611310576113018183611809565b5f6143e4565b806126fc5f61446d93611809565b5f614397565b61448c91965060203d8111611310576113018183611809565b945f614339565b5093929091506144a1611872565b93803b15610107575f928385936144e7604051988996879586947f022c0d9f000000000000000000000000000000000000000000000000000000008652600486016140f8565b03925af191821561131757600192614500575b50614405565b806126fc5f61450e93611809565b5f6144fa565b61451e9350613270565b3515158c8f8d906142f6565b5050955087958c8c5f6142ef565b8c8b5f95614287565b614559915060203d8111611310576113018183611809565b5f614272565b602090614253939496613502565b6dffffffffffffffffffffffffffff8095506001600160a01b0392506145aa839260603d81116145b6575b6145a28183611809565b8101906140c9565b509690935050506141fc565b503d614598565b9091610638936145cc91614df0565b929091614e7a565b5f9182604492602095604051937fa9059cbb000000000000000000000000000000000000000000000000000000008552600485015260248401525af13d15601f3d1160015f51141617161561462557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152fd5b612710821161469d576127109161469991611a11565b0490565b7fdeaa01e6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d565b7faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d565b90602b116101075790602b90565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630148061480f575b15614777577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261480960c082611809565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461474e565b8151919060418303614868576148619250602082015190606060408401519301515f1a90614f59565b9192909190565b50505f9160029190565b6004111561487c57565b634e487b7160e01b5f52602160045260245ffd5b61489981614872565b806148a2575050565b6148ab81614872565b600181036148db577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6148e481614872565b6002810361491857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b80614924600392614872565b1461492c5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60ff811690601f82116149865760405191614973604084611809565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b909190600b811015614a5b57600781036149d557506149d09061011692615573565b615979565b600681036149f057506149eb9061011692615326565b6157ef565b60098103614a0b5750614a069061011692615573565b6155f7565b9160088314614a47575050610a5591505b7f5cda29d7000000000000000000000000000000000000000000000000000000005f52600452602490565b610116925090614a5691615326565b6153cf565b600c8103614add5750614a6d916152a1565b90614a77816152b4565b91808311614aad575061011691907f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9061515a565b7f12bacdd3000000000000000000000000000000000000000000000000000000005f52600452602482905260445ffd5b600f8103614b5f5750614aef916152a1565b90614af981614ff3565b91808310614b2f575061011691907f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9061505f565b7f8b063d73000000000000000000000000000000000000000000000000000000005f52600452602482905260445ffd5b600b8103614b935750614b8d614b7b614b879261011694614fdb565b93829493929193615107565b92615135565b9161515a565b600e8103614bc55750614bb9614baf614bbf9261011694614fdb565b9282949291612f75565b926150f3565b9161505f565b9160108314614bda575050610a559150614a1c565b6101169250614bef614bf892614bbf92614fdb565b92919390612f75565b91614c0284614ff3565b614683565b5f806001600160a01b03614c3093169360208151910182865af1614c29611bcd565b9083615f49565b8051908115159182614c71575b5050614c465750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b614c8492506020809183010191016130f1565b155f80614c3d565b91939290614c9d614ca59286614df0565b918194614e7a565b92604051907f0902f1ac0000000000000000000000000000000000000000000000000000000082526060826004816001600160a01b0389165afa918215611317575f905f93614d1b575b506001600160a01b036dffffffffffffffffffffffffffff80829316941694169116145f14610cae5791565b6dffffffffffffffffffffffffffff8094506001600160a01b039250614d50839260603d6060116145b6576145a28183611809565b50959093505050614cef565b9080158015614de8575b614dc05781614d7491611a11565b916103e88302928084046103e814901517156119da57818103918183116119da576103e583029283046103e514911417156119da57614db291611a24565b600181018091116119da5790565b7f7b9c8916000000000000000000000000000000000000000000000000000000005f5260045ffd5b508215614d66565b6001600160a01b0382166001600160a01b038216105f14610cae5791565b811592838015614e61575b614dc0576103e58202918083046103e514901517156119da57614e3c9082611a11565b926103e883029283046103e81417156119da5781018091116119da5761063891611a24565b508015614e19565b92614c9d90614e7793614df0565b91565b91614f43906001600160a01b03947fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519181602084019460601b16845260601b16603482015260288152614ed1604882611809565b519020610f3f604051938492602084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b5190201690565b90601411613ede573560601c90565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614fd0579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611317575f516001600160a01b03811615614fc657905f905f90565b505f906001905f90565b5050505f9160039190565b90606011611f3a578035916040602083013592013590565b61501e81307f0000000000000000000000000000000000000000000000000000000000000000615b32565b905f821261502a575090565b6001600160a01b03907f4c085bf1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9091801561319d576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610107575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af180156113175761390a5750565b9081615103576106389150614ff3565b5090565b15615131577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90565b3090565b90600160ff1b820361514b576106389150615bbf565b816151035761063891506152b4565b90821561319d576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691823b15610107576040517fa58411940000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f8160248183885af180156113175761528d575b506001600160a01b0381166152435750506020906004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af180156113175761522b5750565b6131f89060203d602011611310576113018183611809565b5f936020939261525292615c25565b6004604051809481937f11da60b40000000000000000000000000000000000000000000000000000000083525af180156113175761522b5750565b806126fc5f61529b93611809565b5f6151dc565b9190604011611f3a576020823592013590565b6152df81307f0000000000000000000000000000000000000000000000000000000000000000615b32565b905f82136152f15750610638906119ca565b6001600160a01b03907f3351b260000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9061016011611f3a5780350190565b356fffffffffffffffffffffffffffffffff811681036101075790565b35610638816103ab565b91908260a091031261010757604051615374816117e8565b60808082948035615384816100f6565b84526020810135615394816100f6565b602085015260408101356153a781611c09565b604085015260608101356153ba81611c16565b60608501520135916153cb836100f6565b0152565b6153db60c08201615335565b6fffffffffffffffffffffffffffffffff811615615536575b61544c6154476109c16154416fffffffffffffffffffffffffffffffff61541d60a08801615352565b9516809561542f610120890189610c64565b92909161543c368b61535c565b615d24565b600f0b90565b615c5c565b9160e081019261547361545e85615335565b6fffffffffffffffffffffffffffffffff1690565b936fffffffffffffffffffffffffffffffff82169485116154e6575050610100013591826154a057505050565b610a056154ac926119df565b908082106154b8575050565b7fefc8d8eb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b906154f3610a5592615335565b7f12bacdd3000000000000000000000000000000000000000000000000000000005f526fffffffffffffffffffffffffffffffff90811660045216602452604490565b5061554360a08201615352565b156155645761555f61544761555a60208401612def565b6152b4565b6153f4565b61555f61544761555a83612def565b9060e011611f3a5780350190565b903590601e1981360301821215610107570180359067ffffffffffffffff821161010757602001918160051b3603831361010757565b9190811015610c5f5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6181360301821215610107570190565b60208101906156068282615581565b90505f9261561660608401615335565b9161562084612def565b926fffffffffffffffffffffffffffffffff8116156157dd575b60408501908261564a8388615581565b8015159586925090826157d2575b50506157aa57949093929493845b61569b5750505050505060800161567f61545e82615335565b6fffffffffffffffffffffffffffffffff8316116154e6575050565b8597506fffffffffffffffffffffffffffffffff6157076157006154415f19946156e36156dc8b6156d08f9c809e9f9d615581565b999091019889916155b7565b9788615e42565b9590911694856156f660808a018a610c64565b9390921590615d24565b5f03615c5c565b98615727575b50505f1961571b8892612def565b95019392949084615666565b615755906ec097ce7bc90715b34b9f10000000006fffffffffffffffffffffffffffffffff8b169102611a24565b9061576a81615764868b615581565b90613270565b3590818310615779575061570d565b7fe6518043000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7f8af5ad98000000000000000000000000000000000000000000000000000000005f5260045ffd5b14159050815f615658565b506157ea615447846152b4565b61563a565b6157fb60c08201615335565b906fffffffffffffffffffffffffffffffff82161561593a575b6158656158606fffffffffffffffffffffffffffffffff61583860a08501615352565b941693615844856119ca565b90615853610120860186610c64565b92909161543c368861535c565b615f2a565b9060e081019161587761545e84615335565b926fffffffffffffffffffffffffffffffff82169384106158ea575050610100013591826158a457505050565b610a056158b0926119df565b908082106158bc575050565b7f4713c18b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b906158f7610a5592615335565b7f8b063d73000000000000000000000000000000000000000000000000000000005f526fffffffffffffffffffffffffffffffff90811660045216602452604490565b905061594860a08201615352565b156159675761596161544761595c83612def565b614ff3565b90615815565b61596161544761595c60208401612def565b60208101906159888282615581565b5f9391508061599684612def565b926159a360608601615335565b6fffffffffffffffffffffffffffffffff811615615b20575b60408601916159cb8388615581565b801515958692509082615b15575b50506157aa575f9591949395945b848610615a205750505050505050608001615a0461545e82615335565b6fffffffffffffffffffffffffffffffff8316106158ea575050565b869850615a7b6158606fffffffffffffffffffffffffffffffff92615a5d615a568a615a50888f9e9c9d9e615581565b906155b7565b9687615e42565b9490911693615a6f6080880188610c64565b929091865f0391615d24565b98615a99575b506001615a8e8993612def565b9601949395916159e7565b615ac6906ec097ce7bc90715b34b9f10000000006fffffffffffffffffffffffffffffffff8b1602611a24565b615ad487615764868b615581565b35808210615ae25750615a81565b7fa9b7edf7000000000000000000000000000000000000000000000000000000005f52600488905260245260445260645ffd5b14159050855f6159d9565b50615b2d61544785614ff3565b6159bc565b6001600160a01b03809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa908115611317575f91615b90575090565b90506020813d602011615bb7575b81615bab60209383611809565b81010312610107575190565b3d9150615b9e565b6001600160a01b038116615bd257504790565b6040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115611317575f91615c0c575090565b610638915060203d602011611310576113018183611809565b61011692916001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169216612104565b906fffffffffffffffffffffffffffffffff8216809203615c7957565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b615d1661063895936001600160a01b0360806101209582815116865282602082015116602087015262ffffff6040820151166040870152606081015160020b6060870152015116608084015260a08301906001600160a01b036040809280511515855260208101516020860152015116910152565b816101008201520191611b05565b936020919394845f14615e1057615d976401000276a4925b615d63615d4761183c565b8815158152948587018890526001600160a01b03166040860152565b60405197889485947ff3cd914c00000000000000000000000000000000000000000000000000000000865260048601615ca1565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315611317575f93615ded575b505f13901515145f14615de757600f0b90565b60801d90565b5f919350615e099060203d602011611310576113018183611809565b9290615dd4565b615d9773fffd8963efd1fc6a506488495d951d5263988d2592615d3c565b3561063881611c09565b3561063881611c16565b905f6080604051615e52816117e8565b8281528260208201528260408201528260608201520152615e7282612def565b906001600160a01b038083169082161015615f0e5790614e7790615efe60015b94615ef4615ea260208301615e2e565b615ee8615ebd6060615eb660408701615e38565b9501612def565b95615ed8615ec961184b565b6001600160a01b03909a168a52565b6001600160a01b03166020890152565b62ffffff166040870152565b60020b6060850152565b6001600160a01b03166080830152565b6001600160a01b0391821691614e779116615efe818414615e92565b5f81600f0b12615c79576fffffffffffffffffffffffffffffffff1690565b90615f865750805115615f5e57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580615fcc575b615f97575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15615f8f56fea164736f6c634300081a000a'; } }