sach0x0000000000000000f95baf80870cd09d0e6000008084300000008080b95b1660806040523480156200001157600080fd5b506200001c62000022565b62000093565b7f8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4805460019091558015620000745760405162461bcd60e51b81526004016200006b9062000077565b60405180910390fd5b50565b60208082526002908201526118a160f11b604082015260600190565b615a7380620000a36000396000f3fe6080604052600436106102045760003560e01c80637efcfe8511610118578063b0705b42116100a0578063c57b22be1161006f578063c57b22be1461057b578063d514da5014610590578063e17376b5146105b0578063f2235487146105d0578063faf4d8cb146105e557610204565b8063b0705b4214610520578063b269b9ae14610461578063b4a8498c14610540578063b65975ec1461055b57610204565b80638ae20dc9116100e75780638ae20dc91461048b5780639ba0d146146104ab5780639beb4650146104cb578063a7e7aacd146104eb578063ab9b2adf1461050057610204565b80637efcfe85146104265780638398180814610441578063871b8ff1146104615780638773334c1461047657610204565b8063452692981161019b5780635aca41f61161016a5780635aca41f614610380578063647b5923146103ad57806367708dae146103cf57806368809a23146103f157806378b91e701461041157610204565b80634526929814610300578063505a757314610320578063595a5ebc1461034057806359acda851461036057610204565b80632a3174f4116101d75780632a3174f4146102965780632d2da806146102b85780633b154b73146102cb578063439fab91146102e057610204565b806313d9787b146102095780631d1796431461022b578063253946451461024b578063264c09121461026b575b600080fd5b34801561021557600080fd5b50610229610224366004614b3a565b6105fa565b005b34801561023757600080fd5b50610229610246366004614976565b610740565b34801561025757600080fd5b50610229610266366004614831565b610755565b34801561027757600080fd5b506102806107b6565b60405161028d919061510a565b60405180910390f35b3480156102a257600080fd5b506102ab6107bf565b60405161028d9190615115565b6102296102c6366004614545565b6107c4565b3480156102d757600080fd5b5061022961082c565b3480156102ec57600080fd5b506102296102fb366004614831565b610832565b34801561030c57600080fd5b5061022961031b366004614a76565b610962565b34801561032c57600080fd5b5061022961033b366004614b05565b610b89565b34801561034c57600080fd5b5061022961035b366004614864565b610df6565b34801561036c57600080fd5b5061022961037b366004614801565b610e03565b34801561038c57600080fd5b506103a061039b3660046145fb565b610e0b565b60405161028d919061581a565b3480156103b957600080fd5b506103c2610eda565b60405161028d9190615864565b3480156103db57600080fd5b506103e4610ee6565b60405161028d9190615894565b3480156103fd57600080fd5b506103a061040c3660046148b5565b610ef5565b34801561041d57600080fd5b506102296110db565b34801561043257600080fd5b5061022961035b366004614b6f565b34801561044d57600080fd5b5061022961045c3660046146d0565b61110b565b34801561046d57600080fd5b506102296113a4565b34801561048257600080fd5b506102806113ae565b34801561049757600080fd5b506102ab6104a6366004614633565b6113b3565b3480156104b757600080fd5b506102ab6104c6366004614b05565b6113d0565b3480156104d757600080fd5b506102296104e636600461465e565b6113e2565b3480156104f757600080fd5b506102806113ee565b34801561050c57600080fd5b5061022961051b366004614b1f565b6114e6565b34801561052c57600080fd5b5061022961053b36600461465e565b6116bb565b34801561054c57600080fd5b506102296104e636600461469d565b34801561056757600080fd5b506102ab610576366004614633565b6118ed565b34801561058757600080fd5b506103e461190a565b34801561059c57600080fd5b506102296105ab3660046145b1565b611920565b3480156105bc57600080fd5b506102296105cb366004614910565b611bf8565b3480156105dc57600080fd5b506103c2611f5e565b3480156105f157600080fd5b506103c2611f71565b600080516020615a1e833981519152546001811461061757600080fd5b6002600080516020615a1e83398151915255610631611f84565b62ffffff63ffffffff841611156106635760405162461bcd60e51b815260040161065a906155c3565b60405180910390fd5b63ffffffff831662ffffff141561068c5760405162461bcd60e51b815260040161065a9061558d565b63ffffffff821661ffff1080156106ac5750637ffffffe63ffffffff8316105b6106c85760405162461bcd60e51b815260040161065a906154b2565b604080516101008101825263ffffffff80861682523360208301528416918101919091526000606082018190526080820181905260a0820181905260c0820181905260e0820181905261071a82611fa7565b9050610727600682611fe8565b50506001600080516020615a1e83398151915255505050565b610748612150565b5050505050505050505050565b600080516020615a1e833981519152546001811461077257600080fd5b5050621baf8060145550601380546001600160a01b031916732eaa1377e0fc95de998b9fa7611e9d67eba534fd1790556001600080516020615a1e83398151915255565b60095460ff1681565b600090565b6001600160a01b0381811614156107ed5760405162461bcd60e51b815260040161065a9061540e565b6000341161080d5760405162461bcd60e51b815260040161065a9061547b565b610815611f84565b610829600061082334612184565b836121b1565b50565b42601555565b61083a612244565b600080808061084b85870187614561565b600280546001600160a01b038086166001600160a01b0319928316179092556003805483881690831617905560138054928516929091169190911790556040805160c0810182526000808252602082018190527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47092820192909252606081018290526080810183905260a0810191909152939750919550935091506108ef81612278565b60008052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee55621baf8060148190556040517ff2b18f8abbd8a0d0c1fb8245146eedf5304887b12f6395b548ca238e054a14839161095191615115565b60405180910390a150505050505050565b600080516020615a1e833981519152546001811461097f57600080fd5b6002600080516020615a1e83398151915255610999611f84565b600354604051634b18bd0f60e01b81526001600160a01b0390911690634b18bd0f906109c9903390600401614f6b565b60006040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b50505050610a0284612278565b600654600160601b900463ffffffff166000908152600d602052604090205414610a3e5760405162461bcd60e51b815260040161065a90615709565b8160005b8163ffffffff16811015610b0c57610a7786868684818110610a6057fe5b9050602002810190610a729190615948565b6122a8565b6020810151600c80546001600160401b03600160801b80830482169094011690920267ffffffffffffffff60801b199092169190911790559550610aba86612278565b865163ffffffff9081166000908152600d6020526040808220939093558851925192909116917f81a92942d0f9c33b897a438384c9c3d88be397776138efa3ba1a4fc8b62684249190a2600101610a42565b506006805463ffffffff600160601b808304821685019091160263ffffffff60601b19909116179055600c546001600160401b03600160401b82048116600160801b909204161115610b705760405162461bcd60e51b815260040161065a906155f9565b506001600080516020615a1e8339815191525550505050565b600080516020615a1e8339815191525460018114610ba657600080fd5b6002600080516020615a1e83398151915281905563ffffffff808416600090815260126020908152604091829020825160c081018452815480861682526001600160a01b0364010000000082048116948301859052600160c01b909104861694820194909452600182015460608201529401549182166080850152600160a01b90910490911660a0830152610c4d5760405162461bcd60e51b815260040161065a9061562f565b6003548151602083015160405163b79eb8c760e01b81526000936001600160a01b03169263b79eb8c792610c8392600401615875565b60206040518083038186803b158015610c9b57600080fd5b505afa158015610caf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd3919061495a565b63ffffffff8516600090815260116020908152604080832080546001600160a01b0319166001600160a01b0386169081179091556012835281842080546001600160e01b03191681556001810194909455600290930180546001600160c01b0319169055908501516080860151865187840151606089015160a08a01519551630234ce5960e41b8152979850959663234ce59096610d75969091600401614ffe565b600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b505050508160a0015163ffffffff167f0b9f3586023bf754b8d962232407f7ac4d90fd19a1c4756c6619927abf06756060405160405180910390a250506001600080516020615a1e833981519152555050565b610dfe612150565b505050565b610829612150565b6000806001600160a01b03831615610ea0576003546040516375698bb160e11b81526001600160a01b039091169063ead3176290610e4d908690600401614f6b565b60206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d9190614ae3565b90505b60046000610eae86846123ed565b6001600160501b03191681526020810191909152604001600020546001600160801b0316949350505050565b600e5463ffffffff1681565b600c546001600160401b031681565b6000333014610f165760405162461bcd60e51b815260040161065a90615666565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190610f45903090600401614f6b565b60206040518083038186803b158015610f5d57600080fd5b505afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f959190614819565b60405163a9059cbb60e01b81529091506001600160a01b0387169063a9059cbb90610fc6908890889060040161503c565b600060405180830381600087803b158015610fe057600080fd5b505af1158015610ff4573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03891691506370a0823190611027903090600401614f6b565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190614819565b90506000611085838361240a565b9050600081116110a75760405162461bcd60e51b815260040161065a90615429565b846001600160801b03168111156110d05760405162461bcd60e51b815260040161065a9061532e565b979650505050505050565b6014546015546110ea91612437565b4210156110f657600080fd5b6000805460ff19166001908117909155429055565b600080516020615a1e833981519152546001811461112857600080fd5b6002600080516020615a1e83398151915255611142611f84565b600e5463ffffffff908116600181019091166000908152600d60205260408120549091905b8061119288888681811061117757fe5b905060c0020180360381019061118d9190614a5b565b612278565b146111c1576001909201918583106111bc5760405162461bcd60e51b815260040161065a906157ab565b611167565b50845b808310156112825763ffffffff60018301166000908152600d60205260409020546111f488888681811061117757fe5b146112115760405162461bcd60e51b815260040161065a906154cd565b8160010191506001600160fd1b0387878581811061122b57fe5b905060c0020160a0013560001c166001600160fd1b038660400151858151811061125157fe5b602002602001015116146112775760405162461bcd60e51b815260040161065a90615349565b8260010192506111c4565b6002548551602087015160608801516040808a015160808b0151915163054185eb60e51b81526000966001600160a01b03169563a830bd60956112cd9591949093919260040161505e565b60206040518083038186803b1580156112e557600080fd5b505afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d91906147e1565b90508061133c5760405162461bcd60e51b815260040161065a9061526f565b60065463ffffffff600160601b9091048116908416111561136f5760405162461bcd60e51b815260040161065a906152dd565b5050600e805463ffffffff191663ffffffff9290921691909117905550506001600080516020615a1e83398151915255505050565b6113ac61245c565b565b600190565b600a60209081526000928352604080842090915290825290205481565b600d6020526000908152604090205481565b6113ea612150565b5050565b600080516020615a1e833981519152546000906001811461140e57600080fd5b6002600080516020615a1e8339815191525560095460ff161561143457600091506114d0565b600c546001600160401b039081166000908152600f60205260408120549091600160a01b90910416431080159061148e5750600c546001600160401b039081166000908152600f6020526040902054600160a01b90041615155b905080156114cd576009805460ff191660011790556040517fc71028c67eb0ef128ea270a59a674629e767d51c1af44ed6753fd2fad2c7b67790600090a15b91505b6001600080516020615a1e833981519152555090565b600080516020615a1e833981519152546001811461150357600080fd5b6002600080516020615a1e8339815191525561151d611f84565b62ffffff63ffffffff841611156115465760405162461bcd60e51b815260040161065a906155c3565b63ffffffff831662ffffff141561156f5760405162461bcd60e51b815260040161065a9061558d565b60006001600160a01b0383166115875750600061160a565b6003546040516375698bb160e11b81526001600160a01b039091169063ead31762906115b7908690600401614f6b565b60206040518083038186803b1580156115cf57600080fd5b505afa1580156115e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116079190614ae3565b90505b604080516101008101825263ffffffff8616815233602082015261ffff8316918101919091526000606082018190526080820181905260a0820181905260c0820181905260e0820181905261165e82611fa7565b905061166b600682611fe8565b600061167733856123ed565b6001600160501b0319166000908152600460205260409020805460ff60801b191660ff60801b17905550506001600080516020615a1e833981519152555050505050565b600080516020615a1e83398151915254600181146116d857600080fd5b6002600080516020615a1e833981519152556116f2611f84565b600354604051634b18bd0f60e01b81526001600160a01b0390911690634b18bd0f90611722903390600401614f6b565b60006040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b50600092508491508290505b8163ffffffff168110156118285761178f86868381811061177757fe5b9050602002810190611789919061595d565b826124df565b85858281811061179b57fe5b90506020028101906117ad919061595d565b6117be906040810190602001614b55565b830192508585828181106117ce57fe5b90506020028101906117e0919061595d565b6117ee906020810190614b05565b63ffffffff167f0cdbd8bd7813095001c5fe7917bd69d834dc01db7c1dfcf52ca135bd2038441360405160405180910390a260010161175a565b50600c805467ffffffffffffffff60401b1967ffffffffffffffff60801b1967ffffffffffffffff1983166001600160401b039384168701841617908116600160801b918290048416879003841690910217908116600160401b918290048316869003909216810291909117909155600680546bffffffff00000000000000001981169083900463ffffffff9081168501811684029190911791829055600e548116929091041611156107275760405162461bcd60e51b815260040161065a90615313565b601060209081526000928352604080842090915290825290205481565b600c54600160401b90046001600160401b031681565b600080516020615a1e833981519152546001811461193d57600080fd5b6002600080516020615a1e8339815191525560006001600160a01b038416156119e3576003546040516375698bb160e11b81526001600160a01b039091169063ead3176290611990908790600401614f6b565b60206040518083038186803b1580156119a857600080fd5b505afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e09190614ae3565b90505b60006119ef86836123ed565b6001600160501b031981166000908152600460205260408120549192506001600160801b0390911690611a22828761296d565b90506000816001600160801b031611611a4d5760405162461bcd60e51b815260040161065a906156b7565b61ffff8416611ae1576000886001600160a01b0316826001600160801b0316604051611a7890614e75565b60006040518083038185875af1925050503d8060008114611ab5576040519150601f19603f3d011682016040523d82523d6000602084013e611aba565b606091505b5050905080611adb5760405162461bcd60e51b815260040161065a9061575a565b50611b5f565b6040516368809a2360e01b815230906368809a2390611b0a908a908c9086908890600401615185565b602060405180830381600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c9190614ac7565b90505b6001600160501b031983166000908152600460205260409081902080546001600160801b0319168385036001600160801b03161790555161ffff8516906001600160a01b038a16907fefef619ae4a542a2b8810b4efeccd8478bd683e985354ee31dd2d644aff6d0ca90611bd490859061581a565b60405180910390a3505050506001600080516020615a1e8339815191525550505050565b600080516020615a1e8339815191525460018114611c1557600080fd5b6002600080516020615a1e833981519152556001600160a01b038281161415611c505760405162461bcd60e51b815260040161065a9061540e565b611c58611f84565b6003546040516375698bb160e11b81526000916001600160a01b03169063ead3176290611c89908890600401614f6b565b60206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd99190614ae3565b60035460405163f3a65bf960e01b81529192506001600160a01b03169063f3a65bf990611d0a908490600401615855565b60206040518083038186803b158015611d2257600080fd5b505afa158015611d36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5a91906147e1565b15611d775760405162461bcd60e51b815260040161065a90615614565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190611da6903090600401614f6b565b60206040518083038186803b158015611dbe57600080fd5b505afa158015611dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df69190614819565b6040516323b872dd60e01b81529091506001600160a01b038716906323b872dd90611e2990339030908a90600401614f7f565b600060405180830381600087803b158015611e4357600080fd5b505af1158015611e57573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03891691506370a0823190611e8a903090600401614f6b565b60206040518083038186803b158015611ea257600080fd5b505afa158015611eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eda9190614819565b90506000611ef0611eeb838561240a565b612184565b90506000816001600160801b0316118015611f1b57506001600160681b036001600160801b03821611155b611f375760405162461bcd60e51b815260040161065a906151cc565b611f428482886121b1565b505050506001600080516020615a1e8339815191525550505050565b600654600160401b900463ffffffff1681565b600654600160601b900463ffffffff1681565b60095460ff16156113ac5760405162461bcd60e51b815260040161065a906154e9565b6060600682516020808501516040808701519051611fd2959493600091829182918291829101614ed6565b6040516020818303038152906040529050919050565b600c544362013b0001906001600160401b03808216600160401b9092041601600061201284612995565b90506040518060600160405280826bffffffffffffffffffffffff19168152602001846001600160401b0316815260200186600b81111561204f57fe5b90526001600160401b038084166000908152600f60209081526040918290208451815492860151909416600160a01b0267ffffffffffffffff60a01b1960609590951c6001600160a01b03199093169290921793909316178083559083015190829060ff60e01b1916600160e01b83600b8111156120c957fe5b02179055509050507fd0943372c08b438a88d4b39d77216901079eda9ca59d45349841c099083b683033838787876001600160401b0316604051612111959493929190614fab565b60405180910390a15050600c80546001600160401b03600160401b80830482166001019091160267ffffffffffffffff60401b19909116179055505050565b6013546040516001600160a01b039091169036600082376000803683855af43d806000843e818015612180578184f35b8184fd5b6000600160801b82106121a95760405162461bcd60e51b815260040161065a9061528a565b50805b919050565b60408051608081018252600080825261ffff861660208301526001600160801b038516928201929092526001600160a01b0383166060820152906121f4826129a3565b9050612201600182611fe8565b8461ffff167f8f5f51448394699ad6a3b80cdadf4ec68c5d724c8c3fea09bea55b3c2d0e2dd085604051612235919061581a565b60405180910390a25050505050565b600080516020615a1e8339815191528054600190915580156108295760405162461bcd60e51b815260040161065a906153f2565b60008160405160200161228b91906157c7565b604051602081830303815290604052805190602001209050919050565b6122b06141c4565b825160010163ffffffff166122cb60a0840160808501614b05565b63ffffffff16146122ee5760405162461bcd60e51b815260040161065a90615681565b8260600151826040013510156123165760405162461bcd60e51b815260040161065a90615239565b6000604083013561232a426201518061240a565b11159050600061233c42610384612437565b84604001351115905081801561234f5750805b61236b5760405162461bcd60e51b815260040161065a906155a8565b5050600080600061237b856129ca565b925092509250600061238e878784612e32565b90506040518060c001604052808760800160208101906123ae9190614b05565b63ffffffff1681526001600160401b039094166020850152604080850195909552938601356060840152943560808301525060a0019290925250919050565b60a01b61ffff60a01b166001600160a01b03919091161760501b90565b60006124308383604051806040016040528060018152602001603b60f91b815250613096565b9392505050565b6000828201838110156124305760405162461bcd60e51b815260040161065a90615364565b6000805460ff19168155600155621baf8060148190556040517ff2b18f8abbd8a0d0c1fb8245146eedf5304887b12f6395b548ca238e054a1483916124a091615115565b60405180910390a1600060158190555b600f8110156124d7576000818152601660205260409020805460ff191690556001016124b0565b506000601755565b600d60006124f06020850185614b05565b63ffffffff16815260208101919091526040016000205461251961118d36859003850185614a5b565b146125365760405162461bcd60e51b815260040161065a90615380565b600654600160401b900463ffffffff1681016001016125586020840184614b05565b63ffffffff161461257b5760405162461bcd60e51b815260040161065a90615775565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060006125ab60c08501856158a8565b9050905060005b81811015612943573660006125ca60c08801886158a8565b848181106125d457fe5b90506020028101906125e69190615904565b915091506000828260008181106125f957fe5b919091013560f81c9050600b81111561260e57fe5b9050600381600b81111561261e57fe5b14156126b857600061266584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130c292505050565b905061ffff63ffffffff16816000015163ffffffff1611156126995760405162461bcd60e51b815260040161065a90615504565b6126b2816000015182604001518360200151600061311d565b506128f3565b600881600b8111156126c657fe5b141561275a57600061270d84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061318492505050565b905061ffff63ffffffff16816000015163ffffffff1611156127415760405162461bcd60e51b815260040161065a906153d5565b6126b2816000015182604001518360200151600161311d565b600681600b81111561276857fe5b141561287b5760006127af84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061319892505050565b905061ffff63ffffffff16816040015163ffffffff16116127e8576127e3816040015182602001518360600151600261311d565b6126b2565b80606001516001600160801b0316600114156126b25760006040518060c00160405280836080015163ffffffff1681526020018360a001516001600160a01b031681526020018360c0015163ffffffff1681526020018360e00151815260200183602001516001600160a01b03168152602001836040015163ffffffff16815250905061287481613280565b50506128f3565b600a81600b81111561288957fe5b14156128db5760006128d084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061336692505050565b90506126b281613280565b60405162461bcd60e51b815260040161065a9061539f565b6129338684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506133fd92505050565b95505050508060010190506125b2565b50604084013582146129675760405162461bcd60e51b815260040161065a906156d3565b50505050565b6000816001600160801b0316836001600160801b03161061298e5781612430565b5090919050565b805160209091012060601b90565b6060600160208084015160408086015160608701519151611fd29594600094939101614e78565b6000806060816129dd6020860186615904565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600c5485517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709a509198509495506001600160401b03808616600160801b909604169490940193600a93509150612a619050565b0615612a7f5760405162461bcd60e51b815260040161065a906151e7565b8151600a90046001600160401b0381118015612a9a57600080fd5b506040519080825280601f01601f191660200182016040528015612ac5576020820181803683370190505b5092506000612ad760608801886158ee565b9050905060005b81811015612e275736612af460608a018a6158ee565b83818110612afe57fe5b9050602002810190612b109190615972565b90506000612b246040830160208401614b05565b63ffffffff16905085518110612b4c5760405162461bcd60e51b815260040161065a906152c1565b600a810615612b6d5760405162461bcd60e51b815260040161065a90615254565b6000600a82049050878181518110612b8157fe5b01602001516001600160f81b03191615612bad5760405162461bcd60e51b815260040161065a906151cc565b600160f81b888281518110612bbe57fe5b60200101906001600160f81b031916908160001a9053506000878381518110612be357fe5b016020015160f81c600b811115612bf657fe5b9050600181600b811115612c0657fe5b1415612c42576000612c1a8985603c61340c565b90506000612c27826134af565b9050612c35818d8b01613538565b8b6001019b505050612e18565b600781600b811115612c5057fe5b1415612d42576000612c648985603c61340c565b90506000612c71826135c8565b9050612c7d8680615904565b159050612cbe576000612c99612c938880615904565b84613638565b905080612cb85760405162461bcd60e51b815260040161065a906153ba565b50612d3b565b60008160200151604051602001612cd59190614c62565b60408051601f198184030181529181528151602092830120848201516001600160a01b03166000908152600a8452828120606087015163ffffffff16825290935291205414905080612d395760405162461bcd60e51b815260040161065a906152f8565b505b5050612e18565b6060600382600b811115612d5257fe5b1415612d6b57612d648985603c61340c565b9050612e0a565b600882600b811115612d7957fe5b1415612d8b57612d648985603c61340c565b600a82600b811115612d9957fe5b1415612dab57612d648985606461340c565b600682600b811115612db957fe5b1415612df257612dcb8985606e61340c565b90506000612dd882613198565b9050612de6818d8b0161371a565b8b6001019b5050612e0a565b60405162461bcd60e51b815260040161065a906156ee565b612e148c826133fd565b9b50505b50505050806001019050612ade565b505050509193909250565b6000806002612e4760a0860160808701614b05565b63ffffffff16612e5d60c0870160a08801614b05565b63ffffffff16604051602001612e74929190614c8f565b60408051601f1981840301815290829052612e8e91614cc3565b602060405180830381855afa158015612eab573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612ece9190614819565b90506002818660800151604051602001612ee9929190614c8f565b60408051601f1981840301815290829052612f0391614cc3565b602060405180830381855afa158015612f20573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612f439190614819565b90506002818560000135604051602001612f5e929190614c8f565b60408051601f1981840301815290829052612f7891614cc3565b602060405180830381855afa158015612f95573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612fb89190614819565b90506002818560400135604051602001612fd3929190614c8f565b60408051601f1981840301815290829052612fed91614cc3565b602060405180830381855afa15801561300a573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061302d9190614819565b9050600061303e6020860186615904565b8560405160200161305193929190614c9d565b60405160208183030381529060405290506040518151838352602082602083018560025afa81845280801561308557613087565bfe5b50509051979650505050505050565b600081848411156130ba5760405162461bcd60e51b815260040161065a91906151b9565b505050900390565b6130ca6141f9565b60056130d683826137aa565b63ffffffff16835290506130ea83826137c3565b6001600160801b03166020840152600201905061310783826137d3565b6001600160a01b03166040840152509092915050565b600061312984866123ed565b905061313581846137e3565b836001600160a01b03168561ffff167f08262c50127efaa884a8609d16fe2ed98c5fd8e4f1c393f2d7d8f9f52f602ff6858560405161317592919061582e565b60405180910390a35050505050565b61318c6141f9565b60096130d683826137aa565b6131a0614219565b60016131ac83826137aa565b63ffffffff16835290506131c083826137d3565b6001600160a01b0316602084015290506131da83826137aa565b63ffffffff16604084015290506131f183826137c3565b6001600160801b03166060840152905061320b83826137aa565b63ffffffff166080840152905061322283826137d3565b6001600160a01b031660a0840152905061323c83826137aa565b63ffffffff1660c084015290506132538382613881565b60e084015290506069811461327a5760405162461bcd60e51b815260040161065a9061564b565b50919050565b60a08101805163ffffffff908116600090815260126020908152604080832086518154938801518389015163ffffffff1990951691871691909117640100000000600160c01b0319166401000000006001600160a01b03928316021763ffffffff60c01b1916600160c01b948716949094029390931781556060870151600182015560808701516002909101805496516001600160a01b0319909716919093161763ffffffff60a01b1916600160a01b9590941694850293909317905590517f1d19de6753fc463923c3d90b6fb45aca536732ed7c5ca377d4b3f63dfbe4d8199190a250565b61336e6141c4565b600561337a83826137aa565b63ffffffff168352905061338e83826137d3565b6001600160a01b0316602084015290506133a883826137aa565b63ffffffff16604084015290506133bf8382613881565b606084015290506133d083826137d3565b6001600160a01b0316608084015290506133ea83826137aa565b63ffffffff1660a0840152509092915050565b80519181526020909101902090565b6060818301845110156134315760405162461bcd60e51b815260040161065a90615460565b6000826001600160401b038111801561344957600080fd5b506040519080825280601f01601f191660200182016040528015613474576020820181803683370190505b50905082156134a757602081018381016020860187015b818310156134a357805183526020928301920161348b565b5050505b949350505050565b6134b761425d565b60016134c383826137aa565b63ffffffff16835290506134d783826137aa565b63ffffffff16602084015290506134ee83826137c3565b6001600160801b03166040840152905061350883826137d3565b6001600160a01b031660608401529050602d811461327a5760405162461bcd60e51b815260040161065a90615445565b6001600160401b0381166000908152600f6020526040902054600160e01b900460ff16600181600b81111561356957fe5b146135865760405162461bcd60e51b815260040161065a906152a6565b6001600160401b0382166000908152600f602052604090205460601b6135ac8482613891565b6129675760405162461bcd60e51b815260040161065a90615521565b6135d061425d565b60016135dc83826137aa565b63ffffffff16835290506135f083826138c1565b6001600160601b0319166020840152905061360b83826137d3565b6001600160a01b03166040840152905061362583826137aa565b63ffffffff166060840152509092915050565b6000808484600081811061364857fe5b919091013560f81c9050600481111561365d57fe5b9050600081600481111561366d57fe5b14156136865761367e8585856138d1565b915050612430565b600181600481111561369457fe5b14156136a55761367e858585613987565b60028160048111156136b357fe5b14156136c45761367e858585613b0a565b60038160048111156136d257fe5b14156136e35761367e858585613bba565b60048160048111156136f157fe5b14156137025761367e858585613cb8565b60405162461bcd60e51b815260040161065a90615202565b6001600160401b0381166000908152600f6020526040902054600160e01b900460ff16600681600b81111561374b57fe5b146137685760405162461bcd60e51b815260040161065a9061553c565b6001600160401b0382166000908152600f602052604090205460601b61378e8482613e5f565b6129675760405162461bcd60e51b815260040161065a90615557565b6004810160006137ba8484613e78565b90509250929050565b6010810160006137ba8484613ead565b6014810160006137ba8484613ed7565b6001600160501b03198216600090815260046020526040908190205481518083019092526001600160801b0316908061381c8385613f01565b6001600160801b03908116825260ff60209283018190526001600160501b031990961660009081526004835260409020835181549490930151909616600160801b0260ff60801b19929091166001600160801b03199093169290921716179092555050565b6020810160006137ba8484613f32565b60006001600160601b031982166138af6138aa856129a3565b612995565b6001600160601b031916149392505050565b6014810160006137ba8484613f5c565b60008061391985858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f8b9050565b91505060008360200151846060015185600001516000801b6040516020016139449493929190614e16565b60405160208183030381529060405280519060200120905060006139688383613fa6565b60408601516001600160a01b0391821691161493505050509392505050565b6000806000806000600190506139d488888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506137d3915050565b604080516020601f8c018190048102820181019092528a8152919650919250613a19918a908a9081908401838280828437600092019190915250859250613881915050565b604080516020601f8c018190048102820181019092528a8152919550919250613a5e918a908a9081908401838280828437600092019190915250859250613881915050565b602080890151604051929550929350600092613a7c92879201614c77565b60408051601f198184030181529082905280516020918201209250600091613ab4916001600160f81b03199189918691899101614c2e565b6040516020818303038152906040528051906020012060001c905087604001516001600160a01b0316816001600160a01b0316148015613afc5750606088015163ffffffff16155b9a9950505050505050505050565b600080613b5285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f8b9050565b9150506000613b838460200151604051602001613b6f9190614c62565b604051602081830303815290604052614061565b613b98613b938660600151614122565b614061565b613ba8613b938760000151614122565b60405160200161394493929190614cdf565b6000806000613c0486868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f8b9050565b915091506000613c4b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250613881915050565b915050600085602001518660600151876000015184604051602001613c739493929190614e16565b6040516020818303038152906040528051906020012090506000613c978483613fa6565b60408801516001600160a01b03918216911614955050505050509392505050565b600080613d0085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925060419150613f8b9050565b60408051808201825260068152655a6b53796e6360d01b602091820152815180830190925260038252620312e360ec1b9101529150600090507fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6e7f2e760812e6696b561a918e71ad2845639638959ed846b188488dd0d8c0b953ef7fe6bbd6277e1bf288eed5e8d1780f9a50b239e86b153736bceebccf4ea79d90b3613da461413b565b604051602001613db7949392919061514c565b60408051601f198184030181529082905280516020918201208682015160608801518851929550600094613e0e947f8012078cc90c4c82e493f1a538159fd8621f39392101b34fba2ecd141432580b94910161511e565b60405160208183030381529060405280519060200120905060008282604051602001613e3b929190614dfb565b6040516020818303038152906040528051906020012090506000613c978583613fa6565b60006001600160601b031982166138af6138aa85611fa7565b6000808260040190508084511015613ea25760405162461bcd60e51b815260040161065a9061573f565b929092015192915050565b6000808260100190508084511015613ea25760405162461bcd60e51b815260040161065a9061569c565b6000808260140190508084511015613ea25760405162461bcd60e51b815260040161065a90615724565b60008282016001600160801b0380851690821610156124305760405162461bcd60e51b815260040161065a90615496565b6000808260200190508084511015613ea25760405162461bcd60e51b815260040161065a90615572565b60008160140183511015613f825760405162461bcd60e51b815260040161065a906155de565b50016020015190565b60006060613f9a85858561340c565b93909201949293505050565b60008251604114613fc95760405162461bcd60e51b815260040161065a9061540e565b60208381015160408086015160608701518251600080825295019283905292939092811a91600190614002908890859088908890615167565b6020604051602081039080840390855afa158015614024573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166140575760405162461bcd60e51b815260040161065a9061521d565b9695505050505050565b6060600082516002026001600160401b038111801561407f57600080fd5b506040519080825280601f01601f1916602001820160405280156140aa576020820181803683370190505b5090506020830183518101602083015b8183101561411857825160f81c6f6665646362613938373635343332313060088260041c021c60f81b82526f66656463626139383736353433323130600882600f16021c60f81b6001830152506001830192506002810190506140ba565b5091949350505050565b60606141358263ffffffff16600461413f565b92915050565b4690565b606060208260ff1611156141655760405162461bcd60e51b815260040161065a90615790565b8160ff166001600160401b038111801561417e57600080fd5b506040519080825280601f01601f1916602001820160405280156141a9576020820181803683370190505b5060ff6008602094850302169390931b918301919091525090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516060810182526000808252602082018190529181019190915290565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b80356121ac816159f3565b60008083601f8401126142a0578182fd5b5081356001600160401b038111156142b6578182fd5b60208301915083602080830285010111156142d057600080fd5b9250929050565b60008083601f8401126142e8578182fd5b5081356001600160401b038111156142fe578182fd5b60208301915083602060c0830285010111156142d057600080fd5b600082601f830112614329578081fd5b6040516102008082018281106001600160401b038211171561434757fe5b604052818482810187101561435a578485fd5b8492505b601083101561437e5780358252600192909201916020918201910161435e565b509195945050505050565b600082601f830112614399578081fd5b813560206143ae6143a9836159aa565b615987565b82815281810190858301838502870184018810156143ca578586fd5b855b858110156143e8578135845292840192908401906001016143cc565b5090979650505050505050565b600082601f830112614405578081fd5b813560206144156143a9836159aa565b8281528181019085830183850287018401881015614431578586fd5b855b858110156143e857813560ff8116811461444b578788fd5b84529284019290840190600101614433565b60008083601f84011261446e578182fd5b5081356001600160401b03811115614484578182fd5b6020830191508360208285010111156142d057600080fd5b600060c082840312156144ad578081fd5b60405160c081018181106001600160401b03821117156144c957fe5b6040529050806144d88361451a565b81526144e66020840161452e565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b803563ffffffff811681146121ac57600080fd5b80356001600160401b03811681146121ac57600080fd5b600060208284031215614556578081fd5b8135612430816159f3565b60008060008060808587031215614576578283fd5b8435614581816159f3565b93506020850135614591816159f3565b925060408501356145a1816159f3565b9396929550929360600135925050565b6000806000606084860312156145c5578081fd5b83356145d0816159f3565b925060208401356145e0816159f3565b915060408401356145f081615a08565b809150509250925092565b6000806040838503121561460d578182fd5b8235614618816159f3565b91506020830135614628816159f3565b809150509250929050565b60008060408385031215614645578182fd5b8235614650816159f3565b91506137ba6020840161451a565b60008060208385031215614670578182fd5b82356001600160401b03811115614685578283fd5b6146918582860161428f565b90969095509350505050565b600080602083850312156146af578182fd5b82356001600160401b038111156146c4578283fd5b614691858286016142d7565b6000806000604084860312156146e4578081fd5b83356001600160401b03808211156146fa578283fd5b614706878388016142d7565b9095509350602086013591508082111561471e578283fd5b908501906102808288031215614732578283fd5b61473c60a0615987565b82358281111561474a578485fd5b61475689828601614389565b82525060208301358281111561476a578485fd5b61477689828601614389565b60208301525060408301358281111561478d578485fd5b61479989828601614389565b6040830152506060830135828111156147b0578485fd5b6147bc898286016143f5565b6060830152506147cf8860808501614319565b60808201528093505050509250925092565b6000602082840312156147f2578081fd5b81518015158114612430578182fd5b600060208284031215614812578081fd5b5035919050565b60006020828403121561482a578081fd5b5051919050565b60008060208385031215614843578182fd5b82356001600160401b03811115614858578283fd5b6146918582860161445d565b600080600060408486031215614878578081fd5b83356001600160401b0381111561488d578182fd5b6148998682870161445d565b90945092506148ac90506020850161451a565b90509250925092565b600080600080608085870312156148ca578182fd5b84356148d5816159f3565b935060208501356148e5816159f3565b925060408501356148f581615a08565b9150606085013561490581615a08565b939692955090935050565b600080600060608486031215614924578081fd5b833561492f816159f3565b925060208401356001600160681b038116811461494a578182fd5b915060408401356145f0816159f3565b60006020828403121561496b578081fd5b8151612430816159f3565b60008060008060008060008060008060008b8d036101e081121561499857898afd5b60c08112156149a557898afd5b508b9a5060c08c01356149b7816159f3565b99506149c560e08d0161451a565b98506149d46101008d0161451a565b97506101208c01356149e581615a08565b96506149f46101408d0161451a565b9550614a036101608d01614284565b9450614a126101808d0161451a565b93506101a08c013592506101c08c01356001600160401b03811115614a35578283fd5b614a418e828f0161428f565b915080935050809150509295989b509295989b9093969950565b600060c08284031215614a6c578081fd5b612430838361449c565b600080600060e08486031215614a8a578081fd5b614a94858561449c565b925060c08401356001600160401b03811115614aae578182fd5b614aba8682870161428f565b9497909650939450505050565b600060208284031215614ad8578081fd5b815161243081615a08565b600060208284031215614af4578081fd5b815161ffff81168114612430578182fd5b600060208284031215614b16578081fd5b6124308261451a565b60008060408385031215614b31578182fd5b6146188361451a565b60008060408385031215614b4c578182fd5b6146508361451a565b600060208284031215614b66578081fd5b6124308261452e565b600080600060408486031215614b83578081fd5b614b8c8461452e565b925060208401356001600160401b03811115614aae578182fd5b60601b6001600160601b0319169052565b6000815180845260208085019450808401835b83811015614be657815187529582019590820190600101614bca565b509495945050505050565b60008151808452614c098160208601602086016159c7565b601f01601f19169290920160200192915050565b60e01b6001600160e01b0319169052565b6001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b6001600160601b031991909116815260140190565b9182526001600160601b031916602082015260340190565b918252602082015260400190565b6000838583378382018181528351614cb98183602088016159c7565b0195945050505050565b60008251614cd58184602087016159c7565b9190910192915050565b60007f19457468657265756d205369676e6564204d6573736167653a0a31353200000082527f5265676973746572207a6b53796e63207075626b65793a0a0a00000000000000601d8301528451614d3d8160368501602089016159c7565b600560f91b6036918401918201819052680dcdedcc6ca744060f60bb1b60378301528551614d72816040850160208a016159c7565b60409201918201526d0c2c6c6deeadce840d2c8744060f60931b60418201528351614da481604f8401602088016159c7565b61050560f11b604f92909101918201527f4f6e6c79207369676e2074686973206d65737361676520666f7220612074727560518201526b7374656420636c69656e742160a01b6071820152607d0195945050505050565b61190160f01b81526002810192909252602282015260420190565b7f19457468657265756d205369676e6564204d6573736167653a0a36300000000081526001600160601b031994909416601c8501526001600160e01b031960e093841b811660308601529190921b166034830152603882015260580190565b90565b60f89590951b6001600160f81b03191685526001600160e01b0319938416600186015260e09290921b909216600584015260809190911b6001600160801b031916600983015260601b6001600160601b0319166019820152602d0190565b6001600160f81b031960f88b901b1681526001600160e01b031960e08a811b821660018401526001600160601b031960608b901b16600584015288811b821660198401526001600160801b0319608089901b16601d84015286901b16602d8201526000614f466031830186614ba6565b614f536045830185614c1d565b50604981019190915260690198975050505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529190921660208201526001600160681b03909116604082015260600190565b6001600160a01b03861681526001600160401b03851660208201526000600c8510614fd257fe5b84604083015260a06060830152614fec60a0830185614bf1565b90508260808301529695505050505050565b6001600160a01b03968716815294909516602085015263ffffffff92831660408501529082166060840152608083015290911660a082015260c00190565b6001600160a01b039290921682526001600160801b0316602082015260400190565b600061028080835261507281840189614bb7565b90506020838203818501526150878289614bb7565b84810360408601528751808252828901935090820190845b818110156150be57845160ff168352938301939183019160010161509f565b505084810360608601526150d28188614bb7565b9350506080840191508460005b60108110156150fc578151845292820192908201906001016150df565b505050509695505050505050565b901515815260200190565b90815260200190565b9384526001600160601b031992909216602084015263ffffffff908116604084015216606082015260800190565b93845260208401929092526040830152606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6001600160a01b0394851681529290931660208301526001600160801b039081166040830152909116606082015260800190565b6000602082526124306020830184614bf1565b6020808252600190820152604360f81b604082015260600190565b6020808252600190820152604160f81b604082015260600190565b6020808252600190820152604760f81b604082015260600190565b6020808252600290820152611c0d60f21b604082015260600190565b6020808252600190820152606760f81b604082015260600190565b6020808252600190820152602160f91b604082015260600190565b6020808252600190820152600760fc1b604082015260600190565b602080825260029082015261189b60f11b604082015260600190565b6020808252600190820152600960fb1b604082015260600190565b602080825260029082015261413160f01b604082015260600190565b6020808252600190820152607160f81b604082015260600190565b6020808252600190820152604560f81b604082015260600190565b6020808252600190820152603760f91b604082015260600190565b6020808252600190820152603760f81b604082015260600190565b6020808252600190820152606f60f81b604082015260600190565b6020808252600290820152610c4d60f21b604082015260600190565b602080825260059082015264065786531360dc1b604082015260600190565b6020808252600190820152601b60fa1b604082015260600190565b6020808252600190820152601160fa1b604082015260600190565b60208082526003908201526236b31960e91b604082015260600190565b60208082526002908201526118a160f11b604082015260600190565b6020808252600190820152600560fc1b604082015260600190565b602080825260029082015261633160f01b604082015260600190565b6020808252600190820152602760f91b604082015260600190565b6020808252600190820152602d60f91b604082015260600190565b6020808252600190820152604d60f81b604082015260600190565b602080825260029082015261189960f11b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b6020808252600290820152616f3160f01b604082015260600190565b6020808252600190820152601360fa1b604082015260600190565b6020808252600390820152626d663160e81b604082015260600190565b6020808252600190820152604960f81b604082015260600190565b6020808252600190820152602560f91b604082015260600190565b6020808252600190820152604b60f81b604082015260600190565b6020808252600190820152605960f81b604082015260600190565b6020808252600190820152603b60f91b604082015260600190565b6020808252600190820152600d60fb1b604082015260600190565b6020808252600190820152606560f81b604082015260600190565b6020808252600190820152605360f81b604082015260600190565b6020808252600190820152603560f91b604082015260600190565b6020808252600190820152603160f91b604082015260600190565b60208082526002908201526106f760f41b604082015260600190565b6020808252600190820152604f60f81b604082015260600190565b6020808252600190820152603560f81b604082015260600190565b6020808252600190820152603360f91b604082015260600190565b6020808252600190820152605760f81b604082015260600190565b602080825260029082015261663160f01b604082015260600190565b6020808252600190820152606d60f81b604082015260600190565b6020808252600190820152602360f91b604082015260600190565b6020808252600190820152606960f81b604082015260600190565b6020808252600190820152602960f91b604082015260600190565b6020808252600190820152602b60f91b604082015260600190565b6020808252600190820152601960fa1b604082015260600190565b6020808252600190820152606b60f81b604082015260600190565b6020808252600190820152605160f81b604082015260600190565b602080825260029082015261379960f11b604082015260600190565b600060c08201905063ffffffff83511682526001600160401b03602084015116602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b6001600160801b0391909116815260200190565b6001600160801b0383168152604081016003831061584857fe5b8260208301529392505050565b61ffff91909116815260200190565b63ffffffff91909116815260200190565b63ffffffff9290921682526001600160a01b0316602082015260400190565b6001600160401b0391909116815260200190565b6000808335601e198436030181126158be578283fd5b8301803591506001600160401b038211156158d7578283fd5b60209081019250810236038213156142d057600080fd5b6000808335601e198436030181126158be578182fd5b6000808335601e1984360301811261591a578182fd5b8301803591506001600160401b03821115615933578283fd5b6020019150368190038213156142d057600080fd5b6000823560be19833603018112614cd5578182fd5b6000823560de19833603018112614cd5578182fd5b60008235603e19833603018112614cd5578182fd5b6040518181016001600160401b03811182821017156159a257fe5b604052919050565b60006001600160401b038211156159bd57fe5b5060209081020190565b60005b838110156159e25781810151838201526020016159ca565b838111156129675750506000910152565b6001600160a01b038116811461082957600080fd5b6001600160801b038116811461082957600080fdfe8e94fed44239eb2314ab7a406345e6c5a8f0ccedf3b600de3d004e672c33abf4a2646970667358221220db75732d422237086db86a6087144e16c98350aa822808c51925faa2735e9d3d64736f6c63430007060033aa7462317137777674356c6a6665616e6c653677666c6e37346a6c76787776786d347474616e3577616577b858483658424c79776d7836444e5a6f6354474e6a5967553049613572456e464b4f5a7557743849683146426230514f4861355553303253477432576c6e3979456144387a6b4f32676f32393543567759355a3446396757673d