mirror of
https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9.git
synced 2026-09-09 00:08:12 +08:00
NOTE: This commit does not compile due to missing RHEL-specific fix-ups, which are split out into separate Git commits following this one. If git bisect selected this commit, run "git bisect skip" and try again. Repeat this until it selects a commit which compiles. This commit was generated using: rhdrm-merge-drm v6.6 RHEL-1350 JIRA: https://issues.redhat.com/browse/RHEL-1350 Conflicts: drivers/gpu/host1x/bus.c Conflict resolution: diff --cc drivers/gpu/drm/Makefile index c4d29229527d,7fba2a3f29e8..57cb5b063510 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@@ -194,4 -197,8 +197,5 @@@ obj-y += gud obj-$(CONFIG_DRM_HYPERV) += hyperv/ obj-y += solomon/ obj-$(CONFIG_DRM_SPRD) += sprd/ + obj-$(CONFIG_DRM_LOONGSON) += loongson/ -# Enable shims for the RHEL DRM backport -subdir-ccflags-y += -DRH_DRM_BACKPORT -drm-y += drm_backport.o diff --cc drivers/gpu/drm/i915/gt/uc/intel_huc.c index 9cc33c117883,ba9e07fc2b57..d50876a68951 --- a/drivers/gpu/drm/i915/gt/uc/intel_huc.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_huc.c @@@ -310,21 -310,10 +310,21 @@@ void intel_huc_init_early(struct intel_ huc->status[INTEL_HUC_AUTH_BY_GSC].mask = HUC_LOAD_SUCCESSFUL; huc->status[INTEL_HUC_AUTH_BY_GSC].value = HUC_LOAD_SUCCESSFUL; } else { - huc->status[INTEL_HUC_AUTH_BY_GSC].reg = HECI_FWSTS5(MTL_GSC_HECI1_BASE); - huc->status[INTEL_HUC_AUTH_BY_GSC].mask = HECI_FWSTS5_HUC_AUTH_DONE; - huc->status[INTEL_HUC_AUTH_BY_GSC].value = HECI_FWSTS5_HUC_AUTH_DONE; + huc->status[INTEL_HUC_AUTH_BY_GSC].reg = HECI_FWSTS(MTL_GSC_HECI1_BASE, 5); + huc->status[INTEL_HUC_AUTH_BY_GSC].mask = HECI1_FWSTS5_HUC_AUTH_DONE; + huc->status[INTEL_HUC_AUTH_BY_GSC].value = HECI1_FWSTS5_HUC_AUTH_DONE; } + + /* + * Initialize fence to be complete as this is expected to be complete + * unless there is a delayed HuC reload in progress. + */ + i915_sw_fence_init(&huc->delayed_load.fence, + sw_fence_dummy_notify); + i915_sw_fence_commit(&huc->delayed_load.fence); + + hrtimer_init(&huc->delayed_load.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); + huc->delayed_load.timer.function = huc_delayed_load_timer_callback; } #define HUC_LOAD_MODE_STRING(x) (x ? "GSC" : "legacy") diff --cc drivers/gpu/drm/tegra/nvdec.c index d150cbc576c3,4860790666af..6beab3756667 --- a/drivers/gpu/drm/tegra/nvdec.c +++ b/drivers/gpu/drm/tegra/nvdec.c @@@ -8,10 -8,9 +8,8 @@@ #include <linux/dma-mapping.h> #include <linux/host1x.h> #include <linux/iommu.h> -#include <linux/iopoll.h> #include <linux/module.h> #include <linux/of.h> - #include <linux/of_device.h> - #include <linux/of_platform.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/reset.h> diff --cc drivers/gpu/host1x/bus.c index 966c243aa448,84d042796d2e..dbbda6813507 --- a/drivers/gpu/host1x/bus.c +++ b/drivers/gpu/host1x/bus.c @@@ -338,32 -338,15 +338,15 @@@ static int host1x_device_match(struct d return strcmp(dev_name(dev), drv->name) == 0; } + /* + * Note that this is really only needed for backwards compatibility + * with libdrm, which parses this information from sysfs and will + * fail if it can't find the OF_FULLNAME, specifically. + */ -static int host1x_device_uevent(const struct device *dev, +static int host1x_device_uevent(struct device *dev, struct kobj_uevent_env *env) { - struct device_node *np = dev->parent->of_node; - unsigned int count = 0; - struct property *p; - const char *compat; - - /* - * This duplicates most of of_device_uevent(), but the latter cannot - * be called from modules and operates on dev->of_node, which is not - * available in this case. - * - * Note that this is really only needed for backwards compatibility - * with libdrm, which parses this information from sysfs and will - * fail if it can't find the OF_FULLNAME, specifically. - */ - add_uevent_var(env, "OF_NAME=%pOFn", np); - add_uevent_var(env, "OF_FULLNAME=%pOF", np); - - of_property_for_each_string(np, "compatible", p, compat) { - add_uevent_var(env, "OF_COMPATIBLE_%u=%s", count, compat); - count++; - } - - add_uevent_var(env, "OF_COMPATIBLE_N=%u", count); + of_device_uevent(dev->parent, env); return 0; } Commit list: commit 1ebc9f0365efa883292caaa87bd393b3a5feafb1 commit c5dacfe2e6c1251276e29b4cdac771f504593523 commit a6dfab2738fc2a47796d85f035a06efb6559c587 commit 9a32dd324c46a0c76cac9d91e5a88abcf83f7b03 commit a118fc6e71f9a8be1d53a25948d9f8b5611e58d9 commit 82a2c0cc1a22ac7a35df7ef4a081b12442f26cf5 commit 41a56a18615c21f02fa8c3098b820a485f33015b commit cef3776d0b5ab3aa333fd41a23e011ca32a16ef4 commit 84e6da7ad5537826343636b846530ec2167d4a19 commit f56fe3e91787dc29c2a3e7ec8b7bc3b80f65fbbc commit 8c33c3755b75c98d8eb490df345b4187a295a1a8 commit b02a9a0c6cb3918998fd7ca5dcfe537f1e056d2a commit 86ecd3b3d16b03146df7a17e4629f5593ead5fd5 commit 88b065943cb583e890324d618e8d4b23460d51a3 commit ad52208657e92d428823e48a23b1047d184fdfd9 commit d4121327ac6af65327c1ae90bac89e1575f0f277 commit a43d92812077b15c8e3bfdf80dc9d8596b503c60 commit 201963a82708780faaed55ca15f8261f98d36d56 commit e39724769d7d98fc0ab4fc2178614d2e141e817c commit a57aa1e3691933869d2bb491ba38a22cfa71e387 commit 29428c85be1d5836fe1238775df85e9cd651a3fa commit 1c7684e7b7b6d9f0cdb600283816faba22c81ee9 commit 5263a63c88d825ab7510fdb36419c06542bf52d9 commit 3d41ec41f14cd782d8247bdd73591f312353485d commit 19a49f3995e118d83aba27c8cb51c479bdf76b19 commit b267a67000d45452524f72c47e12a189a9a341c5 commit 56fafa569764d8f29613f126840b743bef28a2be commit a6c13a23e96b579440af3b2b87390bf12f072bc4 commit 561055b810cac89a4b903a53ebdf34f2cc6e2b3d commit b3e4aae612eca42950c4612f80ec199c15d2fd51 commit d4b62a1a251db33a453ffa9d3535bf6f4a011546 commit ce432fd34cc6c7b7af06d1403ec0be19d1e518dc commit f1f288d07afb46517e377deb8d20f187f51b00b2 commit 179a790aaf2a01279c358bf4f4f62b6958473cd5 commit 49d7d581ceaf4cf85443868b825d45903b4b634c commit e254b584dbc0682b6aceeece052ccf25a52049d1 commit 7f947be02aab5b154427cb5b0fffe858fc387b02 commit 5197c49d20e39ee5dd60df2272ae6fe6cf7ebfe9 commit 460dc4ba1442b3e5e543328d11db2702b98d3d7c commit 6a6b0ab2f3fb1f1afa217ead3323b0310c182162 commit c18cee2ee85c93937858704e37a9b2f212dd6f02 commit a181e9401379e0377a836f353a1793871b28b09b commit 52b9c1ff2d3ddcc50f3a7223b4ad5b9fac01a296 commit e8b883c1239f10dd5bc370eea945610bed07cf89 commit a77c3fe30487739c4829fba22cd0c5b059ee6831 commit 8a824f8fbf82db7a949dd300d88a296ff863b827 commit 4d2391a0dd7040d4310eaebba355d48ca91e6bb5 commit 1d3ebcfc5df072f0ed89e1743f78ffbf149577ae commit 3e3c8e294ba82351fc6164e52f4302dbe4fef0ed commit 783d8b80871f6014a5c73182f63e1ec3c6bdfcd2 commit 8084c63743a88472af0a34ba209eebf9caea1dae commit 0adec22702d497385dbdc52abb165f379a00efba commit 3a89311387cde27da8e290458b2d037133c1f7b5 commit de8a334f215c5a5c5bb070df4325af824d7eaaf1 commit 042aeecc02c83500ad5a4de1e40d2efdfed49a07 commit d755cd3cffe52a4b64c926f4e680d2e2a6edcd94 commit fc4298072a990418af23352d42b04fbd13036008 commit 7142ec2e939872d541f88123c491f992dfad4e38 commit 2798e4d1ccd9b3916a8a4088fa24c0338ede9d90 commit ce6ea7eeff2db080de4bfd651ae37818a46777cc commit 679df6f19f1ebf575f440a704bcb9fe5b6c1f7ed commit 39432640ca99e952095b60baf219c8f17c38a55d commit 7b801dee5200d3e3aa437cf2df1427c0470d7bf2 commit d77721c118e77757adf294d33d894220fd48e87e commit aee90e929d764541f52dc64698f9879044f1b79c commit 528208717eae89ceb969423c643c2725a8e64ccf commit 0641e54fc3476a8d5d64d9ccf7f99bc2a8b0a925 commit 7e8d87e2da3b359ad73246233673a84c4dabfa07 commit d9c078d30e2c605d1a0460e893f7c4d75949c5b0 commit ef0af9db2a21257885116949f471fe5565b2f0ab commit 354c0fb61739c33bad8462b3b33dfb8e0de3478a commit 30b5144ca41266ffc6071c33eea4076b66ac5eb9 commit 42850c9aadfe56fa640b4b77bee4b3c3dab0d583 commit 11f38236f7bb51c04164e0f5a9630cc6b2f9e099 commit 8021fa16b7ec0a3b0457dc15484a7691f99265bc commit 21aa27ddc58269349597c6d243212bcc4065d277 commit a4c253d4f39dc656c0bd2aee9c9a6c7ee7a7c1bc commit 8a4b2fc9c91afb3b0509dfc0ea59dcb5a9f1a48e commit 404643859a4f8ee9f3c1f6b1192a494e866906d5 commit 362fa8f6e6a05089872809f4465bab9d011d05b3 commit 80382226ef6ff7789ad96227a7f2ded95244e96e commit 7f4e171f9d05c2371e477005db8f5f965f4fb25f commit d13b5d2b2b45ab4912190c8f5d8352f22daebcf7 commit 05aa61334592adb230749ff465b103ee10e63936 commit 668f37e1ee11ea6cddf26e4b631fd6433d871d31 commit 75f2d61b3d368eca5c026119d5b597358201bf9b commit 3fe630c7715aaa1cbb6da8b8b5562882971241e9 commit 0cf8d292ba5ed90c7873ea84270deaecc1988f05 commit 1627f650fa5e20c5635c74e1792b2bcc736de2a0 commit c804b83d0d48bc83398f71f40dd1f6c9a411e049 commit efc8ece22fd42b899fa3f3773bcaa7fbab01488a commit e51259d7194b120fdc3ea4568665661d9ff2c86c commit 311eca6400474832e7ec62faa032f6bc95f47f63 commit d43b3cdcc6029eead6976f3abfe94f8c5840ea7f commit 98f518542051ea7abbea1a0cdb388f2c92d902a9 commit 83115e1aa6ff289caa883bb08fe9e0e1ce16b6c9 commit 76afcf5bce4a3d0c2b9c74f9c8a3c82c05317801 commit 26195af5779857ccec3d285a9cacd4a65f126761 commit 6580176fd04331130d94de3022c5eab97dee577e commit 6c494ca6fd820ca6f4329bfbdcd048466dc752e2 commit e2a47217b9ca755ebb56ee696ef022cf340c7bf7 commit cc4fd2934d41a69b4339d7145040d99e7ea79b02 commit 86a124424efce353778c4fab355e185e4781b63e commit 4801a51546a57db5530767beef44b956efc248c3 commit 36dd2a6e5003a215a1d45e41589164dabae0ec5a commit 6b85aa68d9d5a27556b8b1015e7e515a371e77de commit 71e801b9b44f86ce8c816b06960c705f901c50e5 commit 71a7974ac7019afeec105a54447ae1dc7216cbb3 commit f4fab137dd2bc7dfdf8d17f8c53c472a5316109c commit cb7874644f0e3b95a54c4d733168127d43e69553 commit caacfe31d64d78089387c51e80b96634d7e12550 commit 205508cf325cf0cfe7b4f11cbd8dbda8ed018490 commit 175b036472f678948b03baabce4a008b7ba91ce7 commit 7ed40ff1d134bf3a4aef706eed478b926f35b404 commit f3710b424a96078f416e1be9cf52b87eadabae78 commit 2299a8d12c1cbcdc7086027615d9936a970e7d68 commit 731f4ab5d59e4b5a452664bd74390edab98daf52 commit 4cfe75f0f14f044dae66ad0e6eea812d038465d9 commit 30fe33f2342fd93179d014aa1ae71021a0459001 commit 1da14d57526874cefcda494c0d550eeee4f5104e commit a980cac8368b040d00f59f629b94624f8c559d54 commit 3bfe25b5119d6d8f2c9105840d9b0282c69c48d8 commit 48b6701eded8a326566dbd9b01a473bc849f79c1 commit 5b71707dd13cb611bba07ab5f38f92b8f7859d6e commit a74ec2bcdc2298ab025a75b9d5683aabf4e4c043 commit ecf64579fe3dda39bf986686a181027b80c9d075 commit 6bd576da31872006d8489cadc1ee2fe03653fc8d commit 86d86d1ba24b3bc16706d4b72735e54c14ffc982 commit 52c29330ebdd592483a98f5e46c60af83084cc7f commit 546b959ed7aade7a74fe5874adbd89886c5c6d8a commit 95badecb06657e815e23d12db236493b4ca862a1 commit bce1eb508bcb7de74cd598b902324f89d01c584d commit 81c5e39b386cf2059854a213b597b337cba25e15 commit 9124f2b7ff7fdd185cd33612b459bafa6c605b46 commit 98d4cb705bc00afd4a9a71cc1e84f7111682639a commit ecc7a3ce078a209a62af4c53ffb7370620f65c24 commit 8776711e0d6610b0206c1e7025aa8e1219159ed0 commit 4ae7eb9277b164b219d4db3e4621038a10f07f0a commit 5f25966e0fb17d787b2a2f1cf7aec46197b307fe commit e672f9e9f6a74cc24fa268acc5b5aabec458eb72 commit 0c4f52bac4401dfd6f82984040bc0e163b0ccb9c commit 14806c6415820b1c4bc317655c40784d050a2edb commit f567947b9c084d5584f23e0e9e15bc6bb41d7c5b commit e8f7df163cb40152b757be0f66a9c6b520b3037a commit 28cf243a341aff063fa1fec971ee6362008c7192 commit fc311f119425002c7f9a8fcdb10fa97f62267943 commit 9a54a7c3f3fb5f1849355556172fd3e48a5d72f2 commit 03286f948065d68194f5654373a9017a484d364a commit e3affc7cd9b48b03d1235168d50c313e2389a2d7 commit b0fb8b6908a06f35e8ab6d04faac446072ad39ba commit cbaf758809952c95ec00e796695049babb08bb60 commit 72e9abc3dd3eb56335f9a54a1ce243586e8abc74 commit ce98870593fc9f4c62d02e4dea3492ad82a248b9 commit 319eeec55ba3d67e0b9501fa422107447ba3ffe8 commit f39db26c54281da6a785259498ca74b5e470476f commit a122243367a4f9cea5c220d946a7f728e17622a2 commit 4cca9676988f185112d5fc6fd1a2d942c2d4ef4d commit 9856308c94ca821fdc6f3440e4d4de069b09677c commit 49d4648b65d03752904ac945aefa60044329a9a3 commit b8a13e878a7da0e5e2167ec06a021aa16135bf55 commit d84b1945ca02a0cead2d43df0a814854e4a334f4 commit 021a62a52fd22c23a2d01cfe816739b5fca10d28 commit ed6dd32c915de3db0315bfa0283e05a508894b5c commit 83775e158a3d2dc437132ab357ed6c9214ef0ae9 commit ba1efd8e33365d38fb657ea1fb2154e283adfaf3 commit 2c0c15a22fa044282e9d37de576de0dded7a3fbf commit 8829a5623933a4189a834d2fe7efaa4385a541f7 commit c546656f31c5138afcaddfcd8f8b93fbf73e4d3a commit 670451c33c2c8b33faf2e02db32ca7fbd22c6d89 commit 84ab065e7a6ed48571d6bbff518815952dff7981 commit 55e1a5996085513aa2a484ff643ac2bc4b1ff5d6 commit c1e854a3e3fda82a0bf567c2f00bfc4f9b0fb147 commit ca3545cf8b2a21eae79dec4e5a990bbf95ee808a commit 949ab38a05e879f6d9e7e1dfcc86b066a8689de1 commit a8c94b3964c59408f531ce819f13f0209695db7f commit fe9aaddf904db0050a7d14264280544251cb67f2 commit c82eddf8127673e4292761ec303f5116ed07565f commit 44a4f50d5032c3e1e866251ea9028b656934a26b commit 0c2d77beedcb5a0aaf18e1d5cae2b420433bd878 commit 2d0b69fc712c07f9dcd2c551d73615730bd1532e commit 30a97a21915062663463507db56bd79f85c1b36c commit 88c4d4e992dc3a422aea229c551f1dd4611b6e1d commit 3e6a9329e67de86e5357125d5aad987bdd1fdb7c commit 521289d2a279b2fbea0450d5e8e6a01cf70a80b3 commit 1cc506f08b4c4688c729e48d7c665910ed330724 commit 98d19a6c49b5d61d75cf53c7001541f157683bb8 commit 649663af73f59ca6f7dc9021b93c087877e4d8e3 commit e7347f1c73cd2c0df09a59e90fd31e599e239b61 commit a90d36a49a9d4ba703ff680a035e22b88a566023 commit 95de7f26b5c0bd907834b1027a2dca8ac6758bbc commit bc8ba5f2da3e7bd63bc1750f6c7e480c406de8b0 commit e77673d14f2cec6d47d2da4e58dce87c2d66e54f commit a80fe1a698dcc7f5a493af9a16d516f8cbb20564 commit 7c62129b415adbab283e5bddc619a749d7fe3163 commit d228419ffb78e572171a549a4ab994d84ec34dc8 commit 788dbb6b41c596d925d238c6acbb1cec611b353d commit 9041b53a59d77039c69fa61be8575fa232cd3bcd commit eb58ad143dab0c9d649d702cc929f6bd4b62b455 commit c4cde7358d23a8dd4123f3fc8b1f6af882e277bc commit 8c45b31909b730f9c7b146588e038f9c6553394d commit 4755bfbd994ed1915cc71e332024ae3a8012cbec commit 08e852157616ed75ce32bb75080b6e7eef13c62d commit 09c8cbedba5fa85f15ac91ed74848aceff69f8e5 commit 40b1588a750240cbe8a83117aa785d778749a77c commit 8d1077cf2e43b15fefd76ebec2b71541eb27ef2c commit 70d1ace56db6c79d39dbe9c0d5244452b67e2fde commit 815d091f90e170406bcef9aafc4ca434de206765 commit 3b85641abc39966cbaad2e99046cec8de355b5f9 commit 70d3c92d852fdb36ee17edffc2613c4a0b542a7c commit 49c60b2f0867ac36fd54d513882a48431aeccae7 commit 08a3a79ef83f84a60f262b6fb32e45d416629e33 commit 8290bcee57dee29dde0ce005968691fa811d87ed commit fdf1d8e2992db467975079f0dc6e3271e6786ce2 commit 584a3408b2781c97d832c5ccc4c0bf88d7808d73 commit 0db3cef11c2d0afa31f203a4d9b96c2fd5a29e26 commit 1934bf53f2162ba1da8ee963290da190318fd73b commit 7978ec7d0d53a8558a5f92241175dea9f9558822 commit b1c08ffcab41dd49d91c4cf6e7af489d05eca862 commit 45a4ff624f155314b6188d7cb53e80f3861beb0b commit 3b6df06f01cdbff3b610b492ad4879691afdc70d commit 62e6771ae8fbd8822aa1a5f3f701fbe0c0c704b5 commit 67769b7cdd7e1b20059ee19a8e906b1854f9b467 commit 0e2b8507c446e24a76e403e0845c49cd8d86862c commit e2710187bb110be1edd112c9a5e49111ff361726 commit 8612a435f3fb6e1ce1cc24f136b7f543d122dda5 commit 0cfc1d6830465997c8e9d4236f697fb00dfb8aec commit f51f2088f1fd0f9c63a5435ca7e92060bd3a48ae commit b8f68f1da50e1e117dff704fa55602f999539598 commit 38d47145b0dbe9069945c678e1f2067568d6e903 commit 62b73bd50d7d56b8aa0c3ccdaa4c206ec47cc34d commit c7a6c2b6b84b1f3e47a1dafbe8c6a5b7de79d1e6 commit e2770d76d451ad60b8a55f4b4efacf8830921d2e commit 0127ab1bdc61909b0338b00f2737f5fe3860e322 commit edc857a682bb6a69367a707db3ebc31de5bd19ce commit e8483e682a4bf8dd73ddd55fde3baa4bb5ea94c9 commit fe018cf2a1482d92e89410ce2ea6285255f3cfcd commit 6dda3f18bdbdc4a836980b31fdb711019a340f97 commit 35d67ee3e9c9bcaaab9f217cb3cc6dacf21f2b96 commit a811c2e42a519582e7683f1a0ada6fce7e7cf832 commit 2f42c5afb34b5696cf5fe79e744f99be9b218798 commit ef4374fbc6ab4e43dd3454abca52f8e0d0064fb9 commit 955009927c72a1389723cabffd6634456057861a commit 580c7e31d5c52be46e59711c21f11775fcffed66 commit 8df6144dae146ea2296999a257f61bcb4f513fdb commit 09593216bff15866f95c8ad406cb7fdcec1ee40a commit 9710631cc8f367da04879760b892a8fc7aac9f45 commit 8abc1eb2987aee449e62c72a498374a43b409261 commit 8a206685d36f6f0c6b72637f920ef973ea9cc936 commit 2acc73f81f2500e1bf03e2fbba8b733c0817dbb9 commit ca6c1e210aa7d7629900a62f28b5090724054854 commit 08b6e1725dd44be584c55fce1bdc9fe7b4510a49 commit 95b88ea1af4b4c0de3f151347605dbc6734e6cb2 commit bf80d34b6c58ad1c4f76067ecd460a148eab9d39 commit 822130b5e8834ab30ad410cf19a582e5014b9a85 commit 9df88c8104e191550ac46382a7f5b5db4b6fec0c commit 036e348fdccf74db83f18c466123553e12bd35b9 commit 567db9e070a027f3f3673b11c55dc7d2d8df6674 commit 7a93cc579c1e63d956d9ec124100a36d9798ffe8 commit 41b8a08109e959e9f9d77246e630304e5971b397 commit 45b51acb38d40820fca2f8fda07f41ff29c78ca1 commit 1ddcdb7cb6bb5edb889a21228533406e908f7257 commit 596aed31ab1f51ec397fe975e4dfcb60642d6e02 commit 7fbae7fba15f32720165ec47d9c98f99cad0e65d commit 51e647fed701b38c84a785c78e61b48e27147f62 commit 0f9de78205679136fe436a1cc9e442037838b734 commit b82dc4ed4060a80547fdfbf266912462cbc06ab2 commit 1879e009a444c1bacab143c708e10fbb7ce4db98 commit bd974498374942c6ffe9e3b438a8d152e780c1f5 commit c2e3f5b571c543b089ef350cfe8073af151fe7b9 commit c1e18c44dc7f70a411d94f24f437a320b327887c commit f3fa86f5c778e258cd5c01bb420d4639bb393bd0 commit 3ebfa943b8451e4675d023b3f387911702ebee17 commit 5d1eb4c4c872b55664f5754cc16827beff8630a7 commit 2d60ba1bf51e1fa09a7ae376b295489d7c37fb6d commit 8e436326958f633242f2394d4f7c820eb9320280 commit bd3c41425456f6df01cfbc5066c52f427a384b63 commit 52b82609bfe5de43ec88f524345c73ac131b4685 commit 57a95e1bd7644b18e31458059256c18b96535f09 commit 43aa755eae2cda71684f3f5fe40c00f728d25722 commit 36672dda2eb715af99e9abbcdc400d46598b691c commit 7dae503584a1f9fb761fbdfa2efcb6f8a029a0ea commit 290d161045753240f2100b8f44660426ecc97be5 commit 2f77b5931f68b1d1c290fff9d785fe15f1fa2a47 commit f0259c008aeb0cea25b6e49811d5be587e182be6 commit b188069f788d6cbf081a73538e331e19892fbab6 commit 826c1e923be734d182a3ba456f29d4a66eebc4e8 commit 093b21f43173ecd9820a73a87a48905805b4f676 commit 50f600fd6b89af9f14248491090180b111e5e5f7 commit c2268daa65fb415cfd463016ad54c20afef8f75e commit e48aedf7d5f1e00fc7ed3d5a37543228b7173228 commit 03fad56ab746c23c9bf93bbfe3b0941dd298180e commit 8529e3777b7644d41105a06141574a24795f8348 commit c5741c5c1122b7944d9af185c83ab7056153259e commit 6c7f27441d6af776a89147027c6f4a11c0162c64 commit 2ba776f903cb7157e80b5f314fb0b4faf6ea6958 commit 41639b3a8b0f1f194dfe0577d99db70613f78626 commit 33e88286d615d9fa0396f69885a6552ed3302d1e commit ab4c37fe21de4dd6d25ea2b68a5d18806ebfa0fd commit 24b9e4c175f485e07551dfdfba160e73f7bfb3c8 commit 65ac2adfa044e16b59e3b690e42923a5b4e8fa40 commit 2b413c022964e910340ee7dca7167d4eb6ec07ed commit 5b29369b5488d54e466ef7c6a2020a4efc1d854f commit a19de9dbb4d293c064b02cec8ef134cb9812d639 commit f0b60e6e9b2ba36e300f12ce02aae9e7c267ef56 commit a62e702ee1a1ae08693aeaa4ae1fc1448cbd5a19 commit cb906ce32b468099da17ef4181d60eaa77ee89d7 commit 276f6e8cb769b0b9782d9daae307f6a182af3368 commit 5229a37e17dd3edea08b56e0303c410a18c695af commit b2225568cc7bbffc6fa4c65cdd83e2de2eacb84b commit 43c064db65e2bb5c577121353175c4060c88ccae commit 1d96adb1946ca84ccd20b4e7a8f684cff5b0d99c commit ac30aeae7ab9eb57eeb6f0763db16bdc003ba4aa commit c4e532f75336ad03a4d7248b38fa56091dbaeba4 commit bb4fa525f327730e718b2d6e473e608da8eaa894 commit c2de8bc9da17bd5924ba1803493a048f151188e5 commit c324065cd4940145154568e264201d42ed343b40 commit 6f2bde9b0f04293ea2372892afc616f08dd11b48 commit 30e9b7cb9ca4eedfdb7a49d0d3eb9fedf92ec852 commit 135fd1b35690b8be8c0f8de4324128a6a99afa95 commit e198a746fc1bc009e3f0e7b9436553ccdd4f6cc1 commit bf27f5defe92d310099d2f621a5276104d7db093 commit a243e38e699f03b7d73b156564cfd67b78448368 commit cedac798fdad358bd56f3d6dfa38f59c8ac95a83 commit 6d435a2e861f466657535553f6ff9c71f5fe8829 commit 2ad127ba4c6e188e7a83513021a638a748ceb557 commit 3a87e25aaa1bc406fcb4459cfc78642bb070af1a commit c99fcb02bc73d33f9cc52b1e9b705d7a3320c50b commit c4ba2b50f2be8f0ce7bed41d9e5aca66dffc41d2 commit fff7b95a5046be01df5883b3297139cf21bc8763 commit b97089b88c7f8359a772cc2a31e0a87d9441243a commit dfa7a18303917214934f9b2c3dabb7315744033b commit 65e9d632e3c289d264c18c8da7f6304f273319c6 commit 6c3162d03b14fda1fe8e740b46bab4c2f25563ff commit 3999edf8ba0a2f404362269335030d5c35ca27b4 commit 974764180838516f80a13257da67a1ec6afb87d4 commit 63c0bf99c1d020a744eff286d65b33e2960d9d6b commit 250a636a3f46be65c9d10d403cf7f12de017d353 commit 085f7bd955129191d38314a5189c1c27ae014faa commit da915efaa213a33451965db1314a75a39219df65 commit 157f75a79aaf44a124c10cfd05f4056ba3f84b84 commit 4a8e0f9558d74053a5f23bd02dff6883dc837aaf commit 8ed49dd1d3a7448744d57e1da2062b074cba2e49 commit 50e633081e6d26ca7cae6e2b610032a1df1654ed commit 5003ca63bce63b20c02c8049be46c44135939a64 commit e379b5e7dc7e934940290b38d033907930d37c99 commit 18cf073faaa9467d92164dbd4722cf775766860a commit c2307b7fc1c4dfff7c5e0d3b9ae8a403d1e7f370 commit c188622225cec3cecfb276305e68a524578f4c9e commit c1be616260c7e45da7b970d9d60d7653633360a8 commit d84990a6d28785cb4e7259b5b7535c2ee823258b commit e6303f323b1ad9c02ae813fc3dedeaa9dadfd3b0 commit 4f66feeab173bd73e71028b8c2e1dcea07e32dd5 commit a86c75dcdd0374444514c1e40411177ff7afe9bd commit c7a472297169156252a50d76965eb36b081186e2 commit c942e935ff3fa56f6f140c70e04089ee7c389e46 commit e4731b51c847e09ff87d50d6e4cd7ed7501978e9 commit 74a65b3e789a2052dd3fed5119954a48c1d45903 commit 34d7edcf22140d028cb1d9b3d81e1ca9b00a4253 commit e4681be347931f65414a7346274e06a0e72a9187 commit 573cbf48c636c8107266d4103d4ef24027b03c75 commit 722d4f06e560ae8eee84fbd63035356592a37dd1 commit d281eeaa4de2636ff0c8e6ae387bb07b50e5fcbb commit 63fbe9db8127409d1f2eb7b92034204c21905f1c commit 85a241cb128ac449b301d5b7da16a7c11f5fc094 commit adf64e214280a0230af0638c1825b3812421c958 commit 5dbb59247b42d4a82778db4bef29aba083732ee0 commit 09edeb4c1680d4cb271fcd5e5d76f7d058a18e3c commit a6a69a12841cb7bec60bcc1bc0e1ad4ae1ce48cd commit 6f7cd0371ea79df29791fd56df64b516041d4633 commit cef600e1fd63c338bfe19ee3e1adeff8801ba14d commit 0bdebfef3fb2b6291000765eaa9c6c8030293fce commit 9196b63beeaf3e443417107fdbdff85cf4ab4a96 commit 6b4cf4a35f6b89d75524c8d8751c558369ad2e6d commit f135b0fc3110e39b7ac79a932bd0b7eadb337896 commit 27564c61ab1dbd47ba232949f87c8a1043210993 commit c242f48433e79ea8c8c9eb8d2b4a3ee340e635fb commit f2cca20f1fa379d8588e2abe65ac146f68fba6b9 commit dd9c1329027d1f037f61bcad6629397dadab66df commit d65feac281ab479c679e0d5d2e44c3ac98eb8707 commit c3f698d85ecaf66d42871865b38c976c128c297c commit 61b7369483efb5e0a9f3b48e75fac00d46d661e0 commit 40e324e0d859d7645f9331d10986b2b96aed8e10 commit d3f23ab93a1ecb70e8483aa40e997a2142addc86 commit e6fa4816437902b195578fb64bc94600f0728f21 commit 2529d46a03e5495c327ba2b0d6dd76df259bdb0e commit f9400b17a7e3b4a924f58249be0367d33d64eed0 commit 7a9e28ab4990bf47754ab0a2d4c5ed8b116ead9a commit ef28231b5716ad8882e7f12f23beb21c031a34a0 commit b30cb96623e9ffb949627a33f33b4668b0d8af5c commit b364f3cd879888191290cabd8981b0e6bb3a6fdb commit 306f7a5b0e5794701c330291940a15191edc2f27 commit 8cfa71860233652f8566bcdf55e77aefe0017b4a commit bcb48185eddf72d5e2a9f745aaec030778e3ea35 commit 8cddd3dc3c53b2612d5de0ef9416b661695557a5 commit 83f24a8f0532f6d9fcdbe36e438f00a1a082fcd4 commit 7a1c5c6753858cbbf0b073eaa9b53d8f56ee0927 commit b25b3599264eec4f0af879f7e3b22c1cf38d0562 commit 88dd0b188e21d5cc303516b1d63217077a2d1120 commit 37c3fc66201376c2cb066bde13b67bb7c181ec2c commit 519e3637875acc1c60f2e68ea761af95ce9ec61d commit c005a44f3a2afe8365fd73303992127532ef7e2b commit 803d411b31f2b55268bce2f8463563ba9405baee commit 93125cb704919f572c01e02ef64923caff1c3164 commit 8eb94c9b51412dab881211535afeda44d70d6136 commit cbd0606e6a776bf2ba10d4a6957bb7628c0da947 commit 66c2596179beb858d1d04eb95125550163d1ec50 commit c6195ef5eee53ff39a20a4e31ff00e099b09387e commit 6cb209ed68e45c8e4b71d97a037ac6b7dbce9b50 commit 75bd42fd2e8ef81e98418ffd06362169cbeebc06 commit 95aafbc1a567ef027a5805f759dca7c942980616 commit 6917b0b711713b9d84d7e0844e9aa613997a51b2 commit 0f3b9542c9774a2c2ef0fc76387bb48c8fc46b36 commit 4012e0917b61169eeece3b0fb101fe5ff17641f4 commit dbd29029c7b5cd8a126dd4005142ca12bfcf73c0 commit ad4455c614b27e6b24a4e6bd70114545c1660ff9 commit 0d882e43504cf3ac28a0852e1c1cd71155a6919b commit 30953c4d000b6742eeb9cb248e737ecacf3a3b96 commit 80f63f36b86d40f8a615adf247f0fe8a9f4abb1e commit e721611b321adb40c3df85cd6b2ccb4a3df13ad3 commit b9f501c50e517d2cfb2a6d4023ab73e9a00e1bb9 commit 735688eb905db529efea0c78466fccc1461c3fde commit 8549655acbc7d295c7a3940afa8f60c575600f5a commit 8214b5b6f049235e7821d7a5918e29623da8b21d commit de84de1eda9a10044bd4fe8245e1d7a2bbf52362 commit 4a0abebd742ee5e932730fa5ba244125ccc5f2bb commit 2b048fa0ddc4021ce460c4faf96cecf63b425c5d commit abbd6cfb1d5a95e8fd07d2fdaa0fe328c2948a52 commit 8923137dbe4b24863694c35284df51d036b5dd5e commit 818c158fd4e43d07f29cb7eb1a6d0c06a881844f commit 9bc12db4e2f62fe257ce02a8d4aa20e9c47fbe0e commit fcb7a1849aea4a31b7155d0816ad5070983da3d0 commit 50fbe0cc9599f5956b35e1b1834d75b14b10bbb5 commit 53e1db06775ab433d9e66993b683274dd36e63d0 commit ce83aa7bad8327830a1b907b4544e302ef09c2cf commit a0cc8e1512ad72c9f97cdcb76d42715730adaf62 commit fc8e55f378cf11f3abe25ec5cd67b6fc5e915a96 commit 30b59910d9d003424ae1dc327070ad59195c87b2 commit 41cec40bc9baba83d36a0718ea94bfe63189274a commit be04cf93506bb3f34231e6a638ff0a9eaecc230a commit 355da5d48e10620c52ef262bb857266e24b67be4 commit b5ac08806c07ab86645c6fbaa5832214c1d10e34 commit 9af8cd1a1c046ec09cc7118ee5a3bfc6e74d99de commit 4948738e296c75de57e0c4a8e8ead1ff2c03fe00 commit 766819e57dba78bddae61418e7bfa95f63e746fd commit 2f0b927d3ca3440445975ebde27f3df1c3ed6f76 commit c827655b87ad201ebe36f2e28d16b5491c8f7801 commit ad8ebf12217e451cd19804b1c3e97ad56491c74a commit f2dcd21d5a22e13f2fbfe7ab65149038b93cf2ff commit b70df82b428774875c7c56d3808102165891547c commit d459c86f00aa98028d155a012c65dc42f7c37e76 commit 76ff7789d6e63d1a10b3b58f5c70b2e640c7a880 commit 4cd179a312c60587ab15792f04febae3bed5459b commit 45b58669e532bcdfd6e1593488d1f23eabd55428 commit 7c5aa9485871f61d19ad2cecbf4904ea05a39ec4 commit 435cbb0b0ecd3ffd6468acc09c146aaae0cf48fd commit 14c8fca214a27e24f033fe906191651ffe601074 commit 8c3926367ac9df6c25297de2d1d06be34cfd6985 commit aeedd3a82678d89627bdd020a28e0af35ff45552 commit cf8d3223218744d29793071ec6d61eba29057d90 commit b02e6e040af7fa7fd59b0eb71d927dbc149bc20d commit 3c5a5df9c39bd0e408fdf60966b2c8dc2bb9a411 commit 62fa0a985e2c99f716688e6bfbc37338a283a301 commit 829912ebdf47978f396d3added6fd215c36e2bd3 commit 2a1ca44b654346cadfc538c4fb32eecd8daf3140 commit faae5646c13f4697fd2ba29b10e38f9be5aa890a commit 2f6b3f0b10afca77fc7b3850cdccde1958f51b63 commit dc2003560ced79237399193bb411e8899ec1ea3f commit 547e8c5078b6c44fd4f1b0ba7b6e6556ea7a2b42 commit a645529de995bb904cab3bb2d49c87c05245a124 commit 819362e4e62787343d986c5d5701121eeee60eab commit 81dc5ccd75dc2539d6e49b10ff07d188522cdaca commit 1e3a58df21d09ecc76fdbb2a9317366e5e70fe1c commit 8d066f2b5b47810166b3860996fa4df9fcc80187 commit 7406f963bfaf63004dcb25c646d126e40ee2844f commit 823122ecf9ab5f32d0c1b7c02c483b860562ddb5 commit 6ab0a4ab5a708c14435400b1ac8e2477ace7a736 commit a6c4d01aaff67a8e39c4d62aeaca2d4bf7f8725a commit 952ee94593ac3526a43167259e6d476cae64c4ad commit 6d67b681f9ec1bfe2394f28309f7ad991d62db3a commit 8a92e8676cfbe4de018a60a2870de37188fc75c6 commit b8920e1e0dae10ebe34959bdfc6150383bf8d08c commit 7593164d2f13c7022258d64115144c66b8159e84 commit b0bd0a92b8158ea9c809d885e0f0c21518bdbd14 commit f9acfafc3458653d306a45c71e052df50af1c81d commit fc7f1d9697bcd3f7a4c64fb00a0e9bb050eaaa2a commit c5ee872394971f80fe64a593c2f5716a81712f1c commit 14b2760f3cf11d9275b97e6e9ef154d2cdcfc21a commit 82f33504a462610bba4c5eaaee796693eff40a6d commit 6cf20211fc59fcb0bf9b05d4c703cb1e93b167a1 commit 9eec1fc150094857887f44ead59a2c896fbff6d3 commit 7db36fe942b8e8a58f66d4f74941f18baaef8800 commit efd9d065de6733c52b24ecb676ddd94446d1fe11 commit db996e64b293a3452cd26f5de22004f3d26f215f commit 8cbbd11547f61b90b33a4ef70c4614eb2e789c49 commit 3dc6d8352ea9e5508005ff487c8b931918b5eb74 commit 6f38bdb86a056707b9ecb09e3b44adedc8e8d8a0 commit 7ea1db28119e237d634c6f74ba52056939c009ad commit b1cef13e935339aebcc4a78a3348b2c0361e0b72 commit db1f254f2cfaf0510ae34fa2311a8d749e95179a commit a0e6a017ab56936c0405fe914a793b241ed25ee0 commit 5d408ce891d1f8c185b45333cae4c819dd209da1 commit a8b0a7fd535faecbd443c866e6b973a388f0bfab commit a7f880bc4c4b7b0755ed69b066a0707a39dd4cf0 commit e329cb53b45da475966c4b2e49f6a4a430f307fa commit f81bb0ac7872893241319ea82504956676ef02fd commit d0b4c1cf3375e8194d2cfde0b658f1850993c642 commit 48c5c68fdeddcca43a06b22f522784f1284e7a0c commit 9bba6b192663f375e35dd7a72eedc10845c30727 commit c9155a3c31400afacd294c3f6c2458d4150c4fa0 commit fedf429e071f6dbbe7a69dfc342492e037692018 commit 81ed7d737621ff91571daea8fbf277e187e3a207 commit a0c64d153d687756c8719b8d10e609d62e1cb6fd commit fe3015748a905e08eb0e1750aa2928f520063d59 commit 8b8067fcce3df66ce4d00c0c9f80cd3f014d843b commit 132b6512e69453bac0db1437c143e7751c0c88d4 commit 946e047a3d88d46d15b5c5af0414098e12b243f7 commit 4f2b0b583baa4cbafe0b5269ca404e8279ef599e commit 4c940139402747d953178d002296c85352b637b4 commit d2efd0fa69e4153b9f57d9bcb57e292250c9d6db commit 2ecf5a9ec3afa74cf49ab3c0211ba11f3dd9e881 commit 6e193f9fbbb02e1bde88510a71823e5bf83c2010 commit 394ba10e476d092111ebb3419f771bde419a037e commit a1865d3b98c97d25cbfbba4318180f5cfe8ec22d commit 65f4937fc8a8fce8d6b483c289b18abb09b777ff commit 81aedd50697c876e633b68d6188a31aeafcfc535 commit 69312a77cd13e36f87378dfe83480b671ebf9216 commit 7a675a8fa598edb29a664a91adb80f0340649f6f commit 4520844b44323ebc7085020d798be166322672fd commit cd8a064ffa57df895a8ab79b1b9ad4847e79cf7b commit b21f187ff1d032d7541fe441587da1e650b5907e commit 744d35d3436fbeed9131f6ab717aeb3f775b19c4 commit acf228cd3d749726cc6e2719a62d27aa26c3e430 commit 7cb8d1ab8cbda554341dac8b54fd135dedff4245 commit 72e31c0a942d0d864ef217df29188ba23e111d4c commit 7b5745506603f10acedc2be9f913a7776a3c94fd commit 1836a6c6668cf9d566b99e9db1661c107c5b9c81 commit ddd33ff119cfcbb658ed26b543d34d282e01482c commit 0f249678fef4332d26178d264620c2437003dd09 commit 11649154ec46f1c7f7c58bac22e2c5927ca6b6a2 commit c2974f43b1237e0c985760156bc3ca4dccbb5243 commit b6b65e45e09a2e940e48722fa0bfdf16e6f4edf8 commit fbad26dcb657830e59ba2ca5eaba6be0019b97f9 commit bc2aa99b2306bc9d91586bc9187bfef4e61d3882 commit 9b4454fa2528c617b5986517c9c73e50e30d237d commit 4098d1867f27de2443c33e116b064ad3082aecb9 commit a4b563b1d19dea9de366f81cae6342d80b663a45 commit 7a6288726cf6bc0fa1bca0f24922a06425b84bf1 commit e4572f99f8a7dfd8a081c9135943ab82abe6f692 commit a411558cc14309073616e72d259083602585b296 commit 6b00e72e4bee08048379a6365251b195b8a946d1 commit a368b40836e7fc4f24dbb0fcfb9dedcde1dcaa38 commit 71f739082160b5e4def3a7083dc25583cc195d04 commit 290cdd7959a734a0ef20ec096af7810177c4b9f8 commit 8229399486c4f0ab4b223043712a97ae6e49c8de commit d2aacaf07395bd798373cbec6af05fff4147aff3 commit de0874165b830c2b08abe87f4ffc6908f2a00cf0 commit 7afe2340641dc006aad8f356665b1f157509fd3a commit d823445b09a2f1c43877b87a55fc699c3a836fc2 commit 8e4bb53c902ed2b06a2c4778e6dbb2c1eeec4960 commit 8cc8ccbaa5d89b65a32f0260b0cd2288d2c9b6dc commit 3a63ef6e4b9e9db6d1e131f9477f0f4006c894d9 commit 568a2e6f0b12ee3750102032c665a183ac129f52 commit a79d48846b069ed5b0013ef9a3bfee119a5f01e3 commit d6c531ab482031a66a3544423330d30894dba2df commit a899db5b8f9f762097a9eb00373b92f2c3d452b3 commit c0571b20fca4acebd4cb5fcfd07ca4654e9d63dd commit eae7488814b519e49c57dd331a7437d99d8ae91b commit db1184e410744a680f92ca21e5acd5ae54510db8 commit dd9d7c18a78dfab5133e0254eae100107b660fd8 commit 9a2eabf48ade4fbadb54b95dc1ece429b1cce400 commit f1bfcad68170497bc2132b52322d6314fe6b2120 commit 2ff4f6d410afa7625bf784dd54c4511c5b3b7a13 commit ad9ee11fdf113f966e338a3f796efd326fc6f502 commit b0e9267d4ccce9be9217337f4bc364ca24cf7f73 commit 6db96c7703edd6e37da8ca571dfe5e1ecb6010c1 commit 3d00c59d147724e536b415e389445ece6fcda42f commit a238b5ee39e3d3581ec826cdb7b604adca37b5ea commit b27c0f6d208d6ba269f184ed6f92c6a9908866e6 commit 90c0756a5e8ef3664ee924ff82131de7b53dc6a2 commit a82db60440c552b1def32ab33b642454490d850e commit 0fbbe96bfa089c3758a7d1969ff34036d3f03d68 commit 26e60294e8eacedc8ebb33405b2c375fd80e0900 commit a5ae331edb02b6645514f7632478733439e28b34 commit 0c0816d68d963302a7f4a7a28cc685f73263b964 commit 7a5d5f9c05879e98c8009bea6d0740182725de06 commit e02238990b1ab2dfc8abb4c28369f1da6e863f81 commit 7b05a7c0c9ca6e7e2d27181504920987226477e5 commit a7f7d13e9beca72d9630b06bde3ffc4269f55d3f commit fbc0ced450060bbce807b35885fe4be8d19b1e22 commit 7f2a0b50b2b20308a19602b51c647566c62e144c commit f124eef76f855d9f3df8827cb1e166f96994042c commit 7576c4ca6d817221688e985f20eecc1f0ebead93 commit 6b252cf42281045a9f803d2198023500cfa6ebd2 commit b88baab828713ce0b49b185444b2ee83bed373a8 commit 82d750e9d2f5d0594c8f7057ce59127e701af781 commit ca9e70f527150d0518e9da6737d667a8832c60b8 commit 7c9aa0f7463eede3226daf06ff7ccbb813f8b739 commit d9aa1da9a8cfb0387eb5703c15bd1f54421460ac commit 1d47074cb68cf2423b6215b82e43fedaa0ce25d0 commit a6989c86090e50f03b6b1465053ed6796847bd1d commit 0701760ec0e910ab3c399b607e55346d6c57d244 commit 7a22c147f7159f31e49938a84e9d0f09ace430ee commit 70e64c4d522b732e31c6475a3be2349de337d321 commit 99af9c950d6747b026fb24dfb2c8a2c34dfcc452 commit d68a1145dcf156e83a3f3278bed7e420c0fbe850 commit 161c908d6a443c35d3fc61a924d968415ca81cad commit 9b9a5e34d4bb5d07fa22dabbc5807cc4acce839c commit eff7a442c1f924d52ca245218e143e19311dc438 commit 85c391abd2c64d59e34065c7a9e1c192a8309ec5 commit 0ba96fd3c017f879800697b64c1580aadadb73f4 commit 4c340d0034ee1683612ef2425d3f547a50bd0509 commit 927e784c180c942bc7f5aa7164a55ac23ec746b8 commit ec4b70db47e7925c804d8140c3b1f6a62366cb55 commit 41519dc45535acb707d33a13c0b80ab8b96cfe80 commit 15f5b0a7abb7aafe2384a909cb5ece76c0dfc1a5 commit ab3400eb94597ef009c1395c7c789736d070613b commit 510d242f498a00f4701b77c6f42df880abacb3bd commit 54f9e1ca7c658cf9973d4451c035b4acfd6190bb commit ad19c200b1f7c4c9bcfc02db862c3f61072d0de4 commit 2d5c04152a8f3ed6625617386e1b56eaa7beb009 commit 5f95f003179d268c3ce1224f9cff8fd705c29782 commit e2e42edfe8533af7b30f505d41d44e0d180065da commit e013864479f7572153b27072b6693d45301e3cf6 commit f957138cc30ae904346f117013fc7b428700c1f7 commit 62c4b772bdd91ed1745c4a55b681e94aa9e48071 commit 714e0944f9d31a3d9f7d045a867520badfaf68d7 commit 4e2abc197f11e25b5813d4c42dada19d36b04666 commit 21539a6d4154e622ad380ca0bb5b3b385e91f267 commit a5c75947b4107b40c4a3b38bab663b600e7446c2 commit 6fc9d92c3d27f572eb1d884662f199c0d7f90d16 commit f05f4fe6aba0af71670b6b4fcae025485ac222c3 commit c7ddc0a800bc9f681a18c3bdd9f06b61adfabc11 commit 66353ec433418e285fd5bad10384aad7a65af83b commit e24b2fdaec9e9593976ccccc748c2c337f4c61a5 commit dbca8310c8ad5901589d0af1188d81347dd27aa8 commit a494a7ce546dcedd71ebac3332b6e9771b75f62e commit 69a959610229ec31b534eaa5f6ec75965f321bed commit 07867a78f884652d1a6bdd964706532dec486f4d commit 17e349e6841b7b6f259d4ef318aaea3860052539 commit e2066eb4efe0e7d2d329d6e6765ed637a523ac45 commit 7be199bdb7d2f852e61d4fbbf820366a87b8ad69 commit 900af4e4887ca980c8d57889e3d33e36b7586f38 commit 794c33c66f058a0fbbb79e183e32336fb9452f55 commit 899272354dbc1f8ca2d94ea0ddc0174a14fc8324 commit 631ddc35533530cde0ee099d0de74ebd0f20ff8c commit 96c211f1f9ef82183493f4ceed4e347b52849149 commit 05c899eacc0412bae0581add19c4062db8bdffda commit dc3499c71d3618130d9c6675e4de1e3562c17125 commit 792b84fb903839a241f4dd2df92ea9851f3d2160 commit 50709d18f4a659cf7c1c6287498412f367442646 commit 25e6373a5b8efc623443f2699d2b929bf3067d76 commit 36f3f375ed156d177a1adbafc3247a43880a9710 commit 54c30d2a8defeef631d0111477218fe4ceecb3da commit 3b885ab27f361b790b9e8450384a2ba1ef523724 commit d124aa0ac96358042ba34df091a3bfa6e77fcf6f commit 557d466b15a52f23955a9077272ad8c32def624a commit ae77d2fa7b5d3371598929eaee3ff8911a39f3da commit dede1fea4460e734f0ef85875718a036bdd18649 commit 76bd34786ebd323cf4c32604cf6166b08aaa3ffa commit c31866651086fc3ae6ff7ea0aab6b11edc7b7a93 commit 2105a15a20463cb6cee3061f309aeaabd2996d94 commit a7c0cad0dc060bb77e9c9d235d68441b0fc69507 commit 8da0d694a34815ff8cf6606c0f1f742b3594e9f9 commit e3cbb1f404b65211218002df00aead255dfb1c04 commit 664c3b03f9ca97302b4d832d7972326eb5fde3b4 commit f77d1a49902bc70625e3d101a16d8a687f7e97db commit 71ba6b577a353fa880b2e5c85cdd780765c51fed commit 7ce34cbfab26c04c969a32196fbba0f2c6191cb5 commit 3d028d5d60d516c536de1ddd3ebf3d55f3f8983b commit d43270559c3ed00c4d393c091229766798f6539d commit 6cffc78e5ad5e8f2ad81ed11d42a522993fd52b9 commit 4a30cc2bd281fa176a68b5305cd3695d636152ad commit e75b965e9aacb53ed30fadb5bed7f92fb75fe9f4 commit ca030d83f53bbe8cadfaf928d170078213749624 commit 460ea8980511c01c1551012b9a6ec6a06d02da59 commit c5a4f9010d4bcc4ea76341d7e5383b102f965ec5 commit 77cf0607d5507b7093f083e076184fff167276b7 commit 1155150d0dc79125d26436ed20b0ade26939e347 commit 026a71babf48efb6b9884a3a66fa31aec9e1ea54 commit 4c6107a653ccf361cb1b6ba35d558a1a5e6e57ac commit 2abc0ccf92bff889f2aa07c44c4d8093d453dd7a commit 2b1b838ea8e5437ef06a29818d16e9efdfaf0037 commit d8e3fcd3ea152aa41c76dbc82c6df7e41264494b commit 198f0e895349de51b3c96a16b0db6fb2c570983c commit 393e83484839970e4975dfa1f0666f939a6f3e3d commit 98bb4ee9cfe3a52614f1e2c90f4de32173d6f82f commit 7748ce5b69581325cae40c2134088820f0957902 commit 2612e3bbc0386368a850140a6c9b990cd496a5ec commit 927a8e383ab4d49fe40e1df8a92b22b62893d149 commit c224d89c8ee3a38fa9a974a33ad755e4709dbb41 commit bd21470f403549a8746e79f261a82f1248aef5c0 commit b1c5256092b955e656bd70804cd7e001752a79b8 commit ac8140db69a25091c61c444363da6f009cfb5c87 commit bd7b85014db7329164208ce6093bb58fb654705f commit e549097972fe5948d59f5ede14d2aecd7643961d commit 0c65dc0626115b6556588c7e1b903d6d19382b68 commit 48077b0b4e54865745cb789543d5666b4a75c62e commit cc0c986a383df550175164bf8042f031bd5e7df3 commit de01a9193a1dbf8e7700a3ba49883d9106325c16 commit e5706c0496e7abe5757446cc87d8d6f7313aa3a3 commit 6373b7930205b481206145f591e6394fdc96b275 commit 2aa01e4ddea3f5ed5790fca22bbf180339283fbf commit 65c54fe0c85520f800091ae8d95b60792918d07a commit 85b7d20f46ac3b8cbdc921a9e7bb3d1b70ed051d commit e39701e33a438108eefb851cdde1ac1e40d683db commit 3cbc772107af4d57a2e2a7eb7fe711c334fd008a commit a3540b46e92549092a9a4f70197ac6b95a0d4e71 commit e05f3938c5a7896d09736e3381675a57ffee7a0a commit 757b90bbfa14191cbb8e5f15e313174d2100c38b commit aa5f04d2e5a842351449034e619913e1c721a37c commit 162f17b2d97a848586340694e64eff14e60a85a8 commit 73b0648179c51659bb5a7b063f2a3ccb6ea936ce commit 665fdce51b30ead4d9a90015528ef3b61b4fe04d commit 3b780089fd6eae8afdba4b8343af3418e5b45a5b commit 26272ed708fb9332d5efe63f26a694c7d359018c commit 09d97d0acc3ac86d4f2e7d685e093ec70c26777f commit 6e215e108add412cfb7ae036774e402200d29f86 commit 8c3d5b404d7c1b8022299d7a876732d3760c83c6 commit d397fa5e529726ce488faa68484833ea245a94d8 commit 20e688a8700de60718dcec0c1bdd0e10ce21c393 commit f931b011ca20679d2eb8c385decb1574efffbba9 commit 3e6ef49f53c6980543e9dad2eef6908c0bc65139 commit 37d67a7adfa99fdee50068021fce29fcddf12d4d commit 16213ee9f2642cfcf6c2b636baa754328744f704 commit 28b3a7330c52f8d588a5207e2d26d86f9ffb58b8 commit 16d122338b879c5a90e83c0b15fd173568a6b62d commit 4a3026b21f4336997fb2e598f0cb51f8b7fb6676 commit ba5d222a6fe925b4cc4615d224159d2d88a4d3dd commit 223ba2133ee62408a8bf84b9e0444eb6cedd7b3a commit c066a9e4bfd51f3dc027e10aa819bcf2bff6b049 commit cbe2d154aa3a2384144af388371f3acc2b364cdb commit 4e01bbec4b318ebf8619dfd5e7c9fcb5fef511a2 commit df70be37ef74784f1b872c0c2b4d220347302356 commit 53fa57d2186e725b2a39d5e6848fed7a63c2058e commit 958f27fc528a866027de7b7c01c59108fe0700bc commit 78223350126018aa159890ff1c06c747beb7d909 commit 1f9f09da7202dd76d16f7a1dab57d925c1092b9c commit a88c30a72a52b19469591c5abdf62bcecbfa3c36 commit 08b4dc2fdb35c35708cbf5dab200f1d95fdf1edb commit c34a2784254a263fbf419e86abd84d4275f0833b commit 05dfc1beeb01f2f7d623c44e2b3b0d2ba034ce29 commit 8223ef4838c6e7a968d2ae7f598458c22cce5466 commit ffa702d2144d37a70ddc1009d085676efe985520 commit fd9e257a9406099772bcfc4414c32f1e632882b9 commit 0abfc3fd1dda58fe6d0be71647ebdeb0f18f2e06 commit 2ad4f01f19501d2ffc2fe1f7ccccf64d6d5ea93e commit 79501a7fb4c46e7ca35824cd7050197ff3f9d441 commit 485e3fe8636b920859d5362d0ef05debbd0c1da5 commit 2cf9fc26494f58bd18debebc511a4d0860c7bec0 commit 19f6d1dba934e5c6c21afcc2772e4eebb53f28e8 commit 29013f607b79fe415d179f9a8575662a1f125fb2 commit 7ffcbd1a1f59d75804e6ceffb0b90ff8354da745 commit 6f8e98b944735c6c403f2572a6c441e11fe229ed commit d12d92290c26f7e046dfd657a1e9a7f4f427e352 commit 8377c8bfba624e5010fbe3f4a02bddb3da54eae4 commit e761d50d6833916cc417cade91d1199c4c8c6a5e commit 4d2d4f151baa7a91796c91e77d93f6904297cb2f commit 6f3d7a6a24516f06e7f025431be1e6dcd0875d5d commit 6f569e69317e411765b3d02ec9dd6e6c7b816321 commit d1a04161a883b46ade25913a3f74ca40123ecf84 commit a74691f5351785ebfb6082a0a14f02037e185d56 commit 41c1b492bf013074de4a3ccfb8a62e735043d5b5 commit 803fe2098ae89d4ce52169f5fd92d4d69626568d commit 5502cf77e8958c9bae949d76e4d977693f7b08d2 commit e1b3bcaadfaea728046cf18b6af8efc405eb694d commit 3646a89db179a2ff91642d26a59ca01de3ac3cd5 commit 784c1cc51391fbde51d293ad6137ab4faeff8ec1 commit e8d099e861d12c14c205679001604c673fe8fe63 commit e0b1fe5b31e76dbdbe9f018d5501753038534323 commit e822d8392194b53881d60a83ab4d35cfc9e5ec73 commit a4753953a900f1fb93ca0dd374e0a7b681a280a2 commit 06020e1f7ca03960f4b4bc221d64b0fa919d6f31 commit 5cc0ac067494b1b6d324cf9d391730b19e5b431f commit 35c4b73ebe5fd5a89f20e943b733b549224f86eb commit 7c755e21bbc7ae3cc128eab1669b687165ca51c4 commit dfc0cc6828404a9b571d452d6baf1a160aa9b89f commit 82a72b1606b1b746d1094f7734dd232527a48e28 commit 06788a22aa8d49efa11b6dc6eca818719de0192f commit 0b6c14d496228b33bbad24ea91fe6d9a2df73ab0 commit 9c7f00f7d13b192408db083a83b15cc03a4ac635 commit 042a70e43a810a814a13c66b9d32e220384ec9bb commit 08110c26ce50bba2d2ac79ffb5c3a3d81f5af82a commit 46eb29b867e9aba1961dedddb9f2d610cc19214b commit 1f45f1c592401073a93bb39eda98ba215edb6b8d commit f291f9b9dbee022c30af329c9f70066266ee49ce commit 7163dadea2cc0746bf29e93a65949d532a40a907 commit a788b54f3d1d0fd04da7bd422d2f7abda508c7b1 commit 7c29b402368051331e75ecedc72eb988b03904b9 commit 2b77f199a5a8dc58c1c5404d3abfbb0f45b962c9 commit e2515e2b905658a17246d5406125aa333597b436 commit 665ba81b4a0c3776f3161e5ab35d93ab9e4740c7 commit 18ef754488bac64baadc3ab78953b70ba0439d24 commit 06d82d87b4fc5ea5ce9f87f2d27a254209545f76 commit 98268d4033b6bb94cb554d82ca412fc9fd15febc commit 91aafa3c4e89509496b0d0d03f5735f1952dd5e8 commit 7b7fbabbff77d542ad251acede50a848d9b838ce commit 1b01c010d7e830db8cec9dee7bb919c9fded43a2 commit baa5ede87568677b6321f9559b7bc2a16acb3f10 commit 939a392f07e2d553feec97d7345a054586169d0a commit 599f7c8b85b1c9e747d4c6efd14e111c0a3c0d28 commit c8a1439699923b797d04a396365145de4da18c9c commit 2b2b5858f57decf98739c39552440ed2d3d4bef6 commit 7b57c54c96aaf1168904c07b3052aa0f7265760a commit 7bb8c4f6a40d232f4d1501953a94ce4b31033c04 commit 20c7435447a2bf99696f88b48312eaaef6700799 commit b029753034cdd24c56a00f975bc72722ed8063e5 commit 7957ec80ef97e983bb87782757c9dd74c34acc27 commit ec8e59cb4e0c1a52d5a541fff9dcec398b48f7b4 commit 81af32520e7aaa337fe132f16c12ce54170187ea commit 657db07b32293fd0ddca29bd9b9a5e105d186902 commit 7692e1ee2446fd1940b5caa6e09779504a58881a commit f734b2133c803a58174e70e4677d0d02220e2379 commit cd11589b05b73a00dfec4a817c91f90eca27e905 commit bc0f80802d735950738167e2cc0b51b0dd41e68d commit 8d759dc6644df4141a151293cb0e77fd8ca379ed commit 59070fd9ccea58c3363d39f69c25fa98c71eb02f commit e3912d09bf8ddd8e274118d4c9cc550d9665115d commit 24ac009ec39751f40dcd84a222ad088e9529b811 commit 204042049a941d2a9a7d49bdcda768578b5f88ec commit 9e761bff03e137fca0c41fd3bcc3e88167d59dc1 commit 616bceae250d0bab7ab2cbcb0791d820434ffb71 commit 991eb531f482a4ebf2265028add882f149ef1bdc commit d01cb0457de7acf67eee2ff674eaf5fed6b969ef commit 806fd6d005ad7aa9e217d47063e5b12b25143402 commit 2799804ac651da1375ecb9b9a644eba97218df07 commit 1435188307d128671f677eb908e165666dd83652 commit bf9e1bdaf125f8a18a8878f8f555ab0338da2fd0 commit 8a612b2d2e53dc0b869344e5558271b0d7fd4a23 commit 115cdcca6a936579bd3b786b600a3f483f316eb6 commit f1530f912ed87c37cbc803e1fc6c17849fa1514a commit 1486d040df4df9c4bca99e74c09165aa92179dcf commit 1007337f5413259cb1c410e66bf980dd8adba62f commit fcc02c754f313e244cbecfa057ba27978f3b09ce commit 129ebb54f58562c17d30adf71d577aa9286e6ae4 commit 788568fad4015406fa84fc86cefbef7c470c7c1f commit e6b17f5ce92d769e8eb0f25d3aba3684e541309f commit 2b9d7b6515220c30a596aba5633d675117f96500 commit 95979df25be526f06f75313a741c74ee29ee8b65 commit 99c150199659f86bc9135a2d283d859bbcb7ed93 commit 2b4adeb34f992e6347cc0dcb084ad3881dc31e4e commit c99a2e7ae291e5b19b60443eb6397320ef9e8571 commit 80e28aaf93db246c7eb0fb6430d1ba2b140d63b5 commit 6be2ad4f0073c541146caa66c5ae936c955a8224 commit c58dcab081b270c8b56d10de72b859728d237dd1 commit f3651bc0b7fc4361a351fd01d99ba739f67769e4 commit 6e6c74a4def2de26feea680311aa482a07839c2a commit 0dfcf80d41a20d83e41b63dab11eb17d3de69503 commit 97018453946bbca869640d92c19400b17e61b94b commit 57bca71dce1626092b6a2bc91225058af250a93f commit 73c98bf2fad6cd87e34fca4f8cf00329e49e63e7 commit a8b273a8fd9c88cee038ffdae05b7eca063b9622 commit c84f512387fcda784b907c4754b8c4088432fa5d commit 4c452b5c7d73dadd8161a55a7a3f30599e4318aa commit a34cab44094b77667584663df541300a4a033211 commit a57c6c365d0e1bcd0713a3442a28c8c4a502cb02 commit 707b570f4288d54e1e7fdf0ed6a872cc84c6464f commit ba4c1d772c26ee91ea308c1b68f4f58a38de2aa5 commit 1e9e15dcf414bef97489573e3521589b692f7231 commit 475968fe4a05b060864524a403e0d4a53f79aed0 commit 8b3a7a707c6c5f7ccde47cf2427a560675cc5202 commit bd6040b0ea04aca3f90bc81ccd2aa816d20292d7 commit e01eeffc3f861425b3e8238f3d848b25ef9c1243 commit 1b98a5f8e04b944ba93444a8004690391a60fcf1 commit e4538bc78b5198f9a7d94348e868f3fc588cf843 commit d0d6928058300cff555c5e235ab97bcabbdbc62c commit f51069bac67cc5cff1a99ba715a5f7e2dbc78ebd commit 8b4c350c4d0e2df6ed24e670697662db18520acf commit bdacd16afa6c15dde29e3de938aef5c3f772f3bb commit 669f23724711ddbe44e7446375bff0a220b100c2 commit b7cc5b421cad12e4c00934a3e20208fdd7dd405e commit 0514dda30f006d5517ca8f65e4bba46c3107d939 commit 258ee02e23f3c8f6c552b821fe5bd11805363a65 commit b81fde0dfe402e864ef1ac506eba756c89f1ad32 commit 8d72444288c868f135a316f6bd5de292bbd50b37 commit d78c227fce806cc157f147f4472bf288f9d6dce6 commit 56dd5140ebca15f12f70c8c98fda866096df56ae commit 275e37221b1046dea0c1de67c54ad3699fc9eb5b commit a31c114bcfda33548b1197940ec9f05feab5e74b commit 259d968034c3cb1890ff539e75d803b44c8e81e4 commit 3cc0f8f4e391bfb0a9d0ca91594faea56f4752e9 commit dba24294ff3ac025103737ac4c44b92deb71edcb commit ad5594ad41de08f01cb46a2263a1145c58bccee6 commit 97c2eba5d6fb33ada411ce92883823ddc080e40b commit 3831989d62b11e3ef3fdcc44cbed57812082e8b0 commit 945355c96e967aa24712e632ee7c838efc649f2c commit 30c3a3305c62c129e39893aa86840ff8ee64df46 commit aa298b30ce566bb7fe0d5967d3d864cf636d8e4f commit d288c87151a176cda322e8ae19ec307353706cc3 commit 73d450926432c7cb48f668b774629b596afe6084 commit 133fe0dd99a9b896fe66fd4bc682227e8bbd4ded commit 53f3288079460ec7c86a39871af5c8b2a5d48685 commit f7d0157bfb26b8a88d424ac946c4ea31243317f8 commit b73b737f3dd5fb75233645413a73e4eb7da7a41c commit 44fd83e920e2ec0322ad82320ca575445b5e135e commit d117fd296456b0b754fe6819a68ba883c4f46d1c commit bb9f7b6826257390a847abb39c719dca0de41a18 commit e94e787e37b99645e7c02d20d0a1ba0f8a18a82a commit 47f1724db4fe0085b33cafd68bb8b7267678bb95 commit 4d6fc55ab13c7af4fcdbc8373327504ad7f4c4ef commit 236dcf75865b21581e2ce6c7329938525e71c894 commit 39619d50a8e464215b6da6902afe00d3da1ee0ec commit 712c6812dcbf69df9752076705ccc762313083e7 commit e8b2ad875ffa1c213d047e02c9c1b7db5f149241 commit 3cecafc1970f139ea50f7e6adb45525b069e0636 commit 629425673b7764637d6052cff591e88215483e91 commit 05228211e89a882a005d30190cd10fb7282b4b25 commit 4c64f2e420508aa6fdd5ae95ebf0451f3d97a013 commit 765bbbec16a159351f9dbfe415bc3c6c62a48ab9 commit 9366c2e87d08b88332a363adc537962ba3840fd9 commit 15419813f2ef8b810bf2e11f5b2269acf776cb44 commit 1347b15d5e8e167f8f29e7bfb26ce04d335430e9 commit b828e1004cce55a078ba7bb11e252c2499793025 commit 2e0847a756acb69bc8196e5c604a6dcdf0cd0f82 commit 7fc4ccf1b1f538c06057957c661f97840eee9378 commit 81a7be799af7cfb37e24f4d94bde8dcc8fb34c8a commit d34fecc6e91e802f567764ffd0f5c930bb1c398d commit 0fc7d79b45f6fd5129c69cccc41385b09b5e63c1 commit dd12b858c246b81f6ad6d616857f04f1db33a544 commit 1d02ae4ebd672a1140948e36daa5258b9b620434 commit 400a39f1ec43d283b730c25b448dab3abb66886b commit e49311c44a6e5066c117715aadd48d06badfd144 commit f1d1abd616ba008ca679af0e793217ec11c55113 commit b5cdadedaafe15cc940322990081060598570f28 commit 0dee726395333fea833eaaf838bc80962df886c8 commit e20ff051707c010685b638d314b360cea4b68bac commit ef35c7ba60410926d0501e45aad299656a83826c commit 438cf3271ca116253cffb8edce8aba0191327682 commit ff065eaf5502384c0d0a3bd3a9459eb5eb0811e1 commit 46f12960aad2d48fc6742470f718e147e5c85d06 commit 642073c306e66daca108cb630d169129e50a6ba3 commit cacaeb27ade4b793c456179bb6eda4592d206cd8 commit ce7d88110b9ed5f33fe79ea6d4ed049fb0e57bce commit 7189576e8a829130192b33c5b64e8a475369c776 commit f7992bfaf3e35059f26a7be13f42eefc1050ced9 commit 9c319a0f6d52a8ad1364884b3baff57676f26de8 commit f2ac6402760a1a6a7595df7f7182fe9f1c833503 commit cfd48ad8c4a9137b0fde7f0ecf463d44b01875dc commit fdebffeba8b877368ddcc139c26278c1c97931a4 commit 0215845348fd09a0125da3d9d1a1e2476b49cd70 commit 6cdcc65fdb0bc59bfca75d0b6fdc54d6ca347ddf commit c6b9075cfbd624f2b33bd6fd388dc6f0b7027472 commit 443f9e0b1ab5e3b95abf8606097d13e30e2f2413 commit 91dc52151c9b3c955589e1ab3a008f341803f8cf commit 0c3b063ef4136191312a88ea7a670a6a2a2dae5a commit cdf4100eaa1f4107fcf7c95b5eccca96cca6c777 commit cc64ca4b62f5035c87e955f256b338c32dfdbb19 commit bc609f4867f6a14db0efda55a7adef4dca16762e commit 3698a75f5a98d0a6599e2878ab25d30a82dd836a commit 93a3241d615eae69b09be1fb6b309ad116ca03ac commit 0119c894ab0dc468bcb03f28063239c0a4cf970f commit b96a3e9142fdf346b05b20e867b4f0dfca119e96 commit d68b4b6f307d155475cce541f2aee938032ed22e commit 5eefc5307c983b59344a4cb89009819f580c84fa commit 461f35f014466c4e26dca6be0f431f57297df3f2 commit 978474dc8278f661930e02e08d292a45a45fa01a commit b6f6167ea8a424d14b41c172fe7a5f49e164f221 commit ec0e2dc81072300acbda5deca2e02f98485eafa9 commit f046923af79158361295ed4f0a588c80b9fdcc1d commit 1e557c1cd0549b30fa4bc3e9aa46c5eeadaa63f5 commit adc7b226b7d675d011fe86447a5a36b932f1b061 commit a15e61f3371b35b7db2d7890fdc68e5f7678e49f commit 708e49583d7da863898b25dafe4bcd799c414278 commit 96b138cd23e978cd0975d1f4d5709dae2e061fd1 commit 241f0aadb8577dd17fa521bf19ba7ae85dc33d41 commit ba193f62c075768b475efbaec32481a20869813f commit 16735297fdce2c7952dbe23288aad0d327fc444b commit a90c367e5af63880008e21dd199dac839e0e9e0f commit 3cca6b262876d30aae423431e8392d8b97b044fd commit b271e17defb07560399734c7aefbdd0fc961c601 commit 2ee05a4c275a54d9b64599bcbf7117a9490c9e43 commit c15fcf12ffb37be314752202fb02cf16138e66fb commit 338068b5bec4dfa11cf50eb8c1839d1e27749395 commit 7b574863e71833b5a4907245c1d95e76d507b984 commit 96316a06700fc93140e7492c9e994045680f7272 commit f22b1e8500b449fabc33ca271cd8e91749fa63b4 commit 09c8726ffa4a8309af7653988694b6cae6abf723 commit 44e60b14d5a72f91fd0bdeae8da59ae37a3ca8e5 commit 89df3dbeee40216ff23c1556bdfa8e653f296020 commit 4b721ed87e63a654fd0eccbf9284c9436ffc0ced commit d4f6425a5615bbeaee1d14663205b23f82dc0313 commit 46b55e25c94af1689636f4be1760fb0d9ddd8ae2 commit 85609153102ea402e860657e04df4b839b4212ca commit 1836bb0a9d09b42ca1e56e90814eb70658aa7c96 commit bae44a8fcb6e7e244a524b7f3da35b69aa7bb4b3 commit 3aca8cca606be64c7cd6b61b36c8208bab37d44b commit e81c45568505913a2275c6f60577e348d9786743 commit bab9bec6b6fb6d24f6c9205628cd9c46d768e5c1 commit 8f31c7be3e89634767686ffab869cd3ebfea188f commit ed6445f5894dc5a952766725b0689451a58fcfd8 commit 8f1778939b2f22664737a44aa5acf0308bb6518d commit 8c97e87c13d9d181c14545864dbf6bbbd83f639b commit 7656168a8a83f8fc6d062d944fd52d18d4da05d7 commit 3f16096795dff2ae6c91653338d507fc91905160 commit e1c0d2e7066b5675cb62daa2f7cb3899756f789c commit ea7971af7a911a7a388b4c47db2a231a6b8dcc29 commit a9366b944bfdca3c60e463869c8bdb7136b5b6ec commit 7d4424373daacf3b0938d6278136678060690096 commit a7dd9b97fd5b12549721bbdc7977b5671870f4bb commit 7b9f62353024fbf69e1df45f2df87d3cfe0806e9 commit 0a611560f53bfd489e33f4a718c915f1a6123d03 commit 7c2949c12e6d5c0f054ee884de6e5a6a1794f0a9 commit 1611917f39bee1abfc01501238db8ac19649042d commit 39c8b93a105678821cbf1674d56bd58d775b932f commit 05347402d1c1e52924786cd0c0326080c33e00dc commit 72105dcfa3d12b5af49311f857e3490baa225135 commit 1482650bc7ef01ebb24ec2c3a2e4d50e45da4d8c commit 5a3ccb1400339268c5e3dc1fa044a7f6c7f59a02 commit 49a30c3d1a2258fc93cfe6eea8e4951dabadc824 commit 48d02dcba17aae6a1de4f9814aa5cbe4c977abbb commit e0c5c387ac608591c1ce60383b43a99b261483de commit 6d1b3455481a2cc1c6cd478770755c31e932130f commit a1fe9e9f73ce42f8cfcd07b5af221c17b850ebdf commit e23b10675ac610b26f24a6e8b3eb9bc6d38e5342 commit 2031c46b09843c9f135468fe03a333f9fa0a30a7 commit 9f051d6ff13fb20b424a86672db42746aa27d963 commit e9dca969b2426702a73719ab9207e43c6d80b581 commit 46528db35561e45ff0a5e9c80d6e6e69a5877150 commit 35588314e963938dfdcdb792c9170108399377d6 commit e2884fe84a83c562346eb9d92783a3576ce67177 commit 8e1e49550dc85694abd04d86a8ee36bc98bd8b9e commit 7583028d359db3cd0072badcc576b4f9455fd27a commit a81de4a22bbe3183b7f0d6f13f592b8f5b5a3c18 commit 47428f4b638d3b3264a2efa1a567b0bbddbb6107 commit 57a943ebfcdb4a97fbb409640234bdb44bfa1953 commit 07e388aab042774f284a2ad75a70a194517cdad4 commit fbe1a9e0c78134db7e7f48322ab7d6a0530f2ee2 commit d20b484c674d2eae816978a98fa38b4054aeca3b commit dcbad727513d277144aee482b2ffbcd2255c37aa commit d9809d242ff501734e716634e0b3f3e0dce823ec commit 0c02183427b4d2002992f26d4917c1263c5d4a7f commit 51eed9d4ce21f969894b2bc89eb5444b76615f54 commit 43ffcd6fa1635f479ad73145dfbba59edc2b3b28 commit a48fa7efaf1161c1c898931fe4c7f0070964233a commit 1548b060d6f32a00a2f7e2c11328205fb66fc4fa commit afaf2b38025ab327c85e218f36d1819e777d4d45 commit 81faf9e0c3d39d47c6825469591d60a2cd0bbe10 commit 2f06b27444f928a79389b149247508bdad54252b commit 97e3c6a853f2af9145daf0c6ca25bcdf55c759d4 commit 0752e66e91fa86fa5481b04b22053363833ffb85 commit fc6efed2c728c9c10b058512fc9c1613f870a8e8 commit ef064187a9709393a981a56cce1e31880fd97107 commit 169ed4ece8373f02f10642eae5240e3d1ef5c038 commit 679fc891bf11845730b572fc44f8a0eb846aba29 commit 81cc8779cf46d6323c83475706b61d9552230274 commit f5b2c10b57615828b531bb0ae56bd6325a41167e commit 1832403cd41ca6b19b24e9d64f79cb08d920ca44 commit ab43213e7afd08ac68d4282060bacf309e70fd14 commit ffd6bde302061aeee405ab364403af30210f0b99 commit ec5fa9fcdeca69edf7dab5ca3b2e0ceb1c08fe9a commit 9296da8c40900b4dae3d973aa22be306e2a77671 commit 5e7e82254270c8cf8b107451c5de01cee2f135ae commit db5494a85294f057e0bb41bdb5372c2dbf46fb79 commit 64be47ba286117ee4e3dd9d064c88ea2913e3269 commit 29319378449035c6fc6391b31a3c2cbaf75be221 commit c900529f3d9161bfde5cca0754f83b4d3c3e0220 commit 7c95ec3b59479bb24093918bbfc801c9f31826f2 commit edcfe22985d09ee8e2346c9217f5a52ab150099f commit c2122b687c212a28d237fb672cc979247bd94449 commit 7908632f2927b65f7486ae6b67c24071666ba43f commit 139a27854bf5ce93ff9805f9f7683b88c13074dc commit 15794f9dc371fc76b8369eb09a64f57c976aff95 commit 1216d49178b18dc215c642d63c924db7816f59f7 commit c6fbd2b0ca9a752ac797649f0f70e13207bd7f87 commit c3c9acb8b2466ddf7f00fc11e2efb736b5252172 commit 2ba157983974ae1b6aaef7d4953812020d6f1eb5 commit bb6c4507fe825f1b4904fc3ffd329ab196c5e645 commit 7ece3fc9b76b2d4596607fd8751f36c4e5f1f072 commit 31499b0192cea06bbfe2782f288ac5cfe3dc9167 commit e3885f71213437e7fa3e347d16b2bf59d03ae05d commit c5f9362307c685fe6a90d344bf81579578fd25d8 commit f17cc0f11fa18c06b4938c20f0244620199af0b0 commit c524cd40e8a2a1a36f4898eaf2024beefeb815f3 commit 4556b93f6c026c62c93e7acc22838224ac2e2eba commit 6f6583e58d1ddf3c46e25ed756e6d5c8277968ee commit 06cce38ef51fc101402a0b02fca6e69c2e15ff3c commit f387bb578d49c5bf24204810cb2721f151d3eee2 commit 2de19022c5d7ff519dd5b9690f7713267bd1abfe commit cc39f9ccb82426e576734b493e1777ea01b144a8 commit f675553d76c9e36c2745181146a0aadfffcbfddd commit ab2bff5993d8f17dab6e574b2ae722ad8ecbb292 commit 54928f2f8458160e6c7217de78b48064b301e255 commit 5c519bc075b3306a5b6a6d5f1e22f37357e936d9 commit 863a8eb3f27098b42772f668e3977ff4cae10b04 commit b7599d241778d0b10cdf7a5c755aa7db9b83250c commit 907ef0398c938be8232b77c61cfcf50fbfd95554 commit 6edc84bc3f8aceae74eb63684d53c17553382ec0 commit 885291ab687e83085b9f450ec1efaed44a8a7ab6 commit cbb7eb2dbd9472816e42a1b0fdb51af49abbf812 commit 152be54224de182730cf4ee2fe073391623c97f9 commit bbe08a0e11ae76fc466c11b9fa6dd6eb52544a46 commit d59e75eef52d89201aaf5342a3ac23ddf3e9b112 commit 128c20eda73bd3e78505c574fb17adb46195c98b commit 6007265ad70a87aa9b4eea79b5e5828da452cfd8 commit 1fbb6c1d88c421bf9e7fc456aeabc5dc026062e0 commit 4953856f280b2b606089a72a93a1e9212a3adaca commit 5d061675b7538e25d060d13310880c01160207c4 commit 2a1fe39a5be785e962e387146aed34fa9a829f3f commit 134b8c5d8674e7cde380f82e9aedfd46dcdd16f7 commit b206011bf05069797df1f4c5ce639398728978e2 commit b83ce9cb4a465b8f9a3fa45561b721a9551f60e3 commit 62af7387cdf93ea23209cf2ca761ea2d9a91a819 commit 67f35a41d3748b7bab8787d20b50cf33fafa2ae0 commit 39465cac283702a7d4a507a558db81898029c6d3 commit 91398b413d03660fd5828f7b4abc64e884b98069 commit 23645bca98304a2772f0de96f97370dd567d0ae6 commit ff89f064dca38e2203790bf876cc7756b8ab2961 commit 3806a8c64794661b15ff5ed28180ff9a5f79fce8 commit 258dd5e6e65995ee85a941eed9a06708a36b1bfe commit 2b7947bd32e243c52870d54141d3b4ea6775e63d commit b7fd68ab1538e3adb665670414bea440f399fda9 commit c1165df2be2fffe3adeeaa68f4ee4325108c5e4e commit 7b821db95140e2c118567aee22a78bf85f3617e0 commit ad3e33fe071dffea07279f96dab4f3773c430fe2 commit f2cab4b318ee8023f4ad640b906ae268942a7db4 commit 4366faf43308bd91c59a20c43a9f853a9c3bb6e4 commit dcad98b140554c325fa2ec7d42311edc7a79cdbb commit 30873697b83743eda54d66ea9a3ea83554f8a535 commit 3b401e30c249849d803de6c332dad2a595a58658 commit 88630e91f12677848c0c4a5790ec0d691f8859fa commit eab0261967aeab528db4d0a51806df8209aec179 commit fa8391ad68c16716e2c06ada397e99ceed2fb647 commit 5e4c16fe08c8b894b258f4110349dc9b642669f9 commit e339c6d628fe66c9b64bf31040a55770952aec57 commit 6b18ef481f31d0df9d1b20a40c8174956bd947fa commit 3d887d512494d678b17c57b835c32f4e48d34f26 commit 51b79f33817544e3b4df838d86e8e8e4388ff684 commit 316baf09d355aec1179981b6dfe28eba50c5ee5b commit d43c76c8208c1c5e83bcf79c3f08974b231188f3 commit 280bd84f0743f95849dbaadb12e9c0e532398d8d commit d3df66fd98557c25856860b7d9c3b8b93d449f0a commit 4984fc578a911f3146965f4086d0a219a9806002 commit cba94bbcff08d209710dd7bdc139caad675a6f8d commit 4e6c38c38723a954b85aa9ee62603bb4a37acbb4 commit 78cc55e0b64c820673a796635daf82c7eadfe152 commit 4cbed7702eb775cca22fff6827a549092cb59f61 commit 64ffd2f1d00c6235dabe9704bbb0d9ce3e28147f commit 6366ffa6edd832de870aaef184d5949a2e09c0c2 commit 5679dd241bbf36492d8fcddb99af48b22a5f99ec commit 44117828ed5c129a8146585e81262c0025daa50f Signed-off-by: Mika Penttilä <mpenttil@redhat.com>
203 lines
5.6 KiB
C
203 lines
5.6 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* DMA-BUF sysfs statistics.
|
|
*
|
|
* Copyright (C) 2021 Google LLC.
|
|
*/
|
|
|
|
#include <linux/dma-buf.h>
|
|
#include <linux/dma-resv.h>
|
|
#include <linux/kobject.h>
|
|
#include <linux/printk.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/sysfs.h>
|
|
|
|
#include "dma-buf-sysfs-stats.h"
|
|
|
|
#define to_dma_buf_entry_from_kobj(x) container_of(x, struct dma_buf_sysfs_entry, kobj)
|
|
|
|
/**
|
|
* DOC: overview
|
|
*
|
|
* ``/sys/kernel/debug/dma_buf/bufinfo`` provides an overview of every DMA-BUF
|
|
* in the system. However, since debugfs is not safe to be mounted in
|
|
* production, procfs and sysfs can be used to gather DMA-BUF statistics on
|
|
* production systems.
|
|
*
|
|
* The ``/proc/<pid>/fdinfo/<fd>`` files in procfs can be used to gather
|
|
* information about DMA-BUF fds. Detailed documentation about the interface
|
|
* is present in Documentation/filesystems/proc.rst.
|
|
*
|
|
* Unfortunately, the existing procfs interfaces can only provide information
|
|
* about the DMA-BUFs for which processes hold fds or have the buffers mmapped
|
|
* into their address space. This necessitated the creation of the DMA-BUF sysfs
|
|
* statistics interface to provide per-buffer information on production systems.
|
|
*
|
|
* The interface at ``/sys/kernel/dmabuf/buffers`` exposes information about
|
|
* every DMA-BUF when ``CONFIG_DMABUF_SYSFS_STATS`` is enabled.
|
|
*
|
|
* The following stats are exposed by the interface:
|
|
*
|
|
* * ``/sys/kernel/dmabuf/buffers/<inode_number>/exporter_name``
|
|
* * ``/sys/kernel/dmabuf/buffers/<inode_number>/size``
|
|
*
|
|
* The information in the interface can also be used to derive per-exporter
|
|
* statistics. The data from the interface can be gathered on error conditions
|
|
* or other important events to provide a snapshot of DMA-BUF usage.
|
|
* It can also be collected periodically by telemetry to monitor various metrics.
|
|
*
|
|
* Detailed documentation about the interface is present in
|
|
* Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers.
|
|
*/
|
|
|
|
struct dma_buf_stats_attribute {
|
|
struct attribute attr;
|
|
ssize_t (*show)(struct dma_buf *dmabuf,
|
|
struct dma_buf_stats_attribute *attr, char *buf);
|
|
};
|
|
#define to_dma_buf_stats_attr(x) container_of(x, struct dma_buf_stats_attribute, attr)
|
|
|
|
static ssize_t dma_buf_stats_attribute_show(struct kobject *kobj,
|
|
struct attribute *attr,
|
|
char *buf)
|
|
{
|
|
struct dma_buf_stats_attribute *attribute;
|
|
struct dma_buf_sysfs_entry *sysfs_entry;
|
|
struct dma_buf *dmabuf;
|
|
|
|
attribute = to_dma_buf_stats_attr(attr);
|
|
sysfs_entry = to_dma_buf_entry_from_kobj(kobj);
|
|
dmabuf = sysfs_entry->dmabuf;
|
|
|
|
if (!dmabuf || !attribute->show)
|
|
return -EIO;
|
|
|
|
return attribute->show(dmabuf, attribute, buf);
|
|
}
|
|
|
|
static const struct sysfs_ops dma_buf_stats_sysfs_ops = {
|
|
.show = dma_buf_stats_attribute_show,
|
|
};
|
|
|
|
static ssize_t exporter_name_show(struct dma_buf *dmabuf,
|
|
struct dma_buf_stats_attribute *attr,
|
|
char *buf)
|
|
{
|
|
return sysfs_emit(buf, "%s\n", dmabuf->exp_name);
|
|
}
|
|
|
|
static ssize_t size_show(struct dma_buf *dmabuf,
|
|
struct dma_buf_stats_attribute *attr,
|
|
char *buf)
|
|
{
|
|
return sysfs_emit(buf, "%zu\n", dmabuf->size);
|
|
}
|
|
|
|
static struct dma_buf_stats_attribute exporter_name_attribute =
|
|
__ATTR_RO(exporter_name);
|
|
static struct dma_buf_stats_attribute size_attribute = __ATTR_RO(size);
|
|
|
|
static struct attribute *dma_buf_stats_default_attrs[] = {
|
|
&exporter_name_attribute.attr,
|
|
&size_attribute.attr,
|
|
NULL,
|
|
};
|
|
ATTRIBUTE_GROUPS(dma_buf_stats_default);
|
|
|
|
static void dma_buf_sysfs_release(struct kobject *kobj)
|
|
{
|
|
struct dma_buf_sysfs_entry *sysfs_entry;
|
|
|
|
sysfs_entry = to_dma_buf_entry_from_kobj(kobj);
|
|
kfree(sysfs_entry);
|
|
}
|
|
|
|
static const struct kobj_type dma_buf_ktype = {
|
|
.sysfs_ops = &dma_buf_stats_sysfs_ops,
|
|
.release = dma_buf_sysfs_release,
|
|
.default_groups = dma_buf_stats_default_groups,
|
|
};
|
|
|
|
void dma_buf_stats_teardown(struct dma_buf *dmabuf)
|
|
{
|
|
struct dma_buf_sysfs_entry *sysfs_entry;
|
|
|
|
sysfs_entry = dmabuf->sysfs_entry;
|
|
if (!sysfs_entry)
|
|
return;
|
|
|
|
kobject_del(&sysfs_entry->kobj);
|
|
kobject_put(&sysfs_entry->kobj);
|
|
}
|
|
|
|
|
|
/* Statistics files do not need to send uevents. */
|
|
static int dmabuf_sysfs_uevent_filter(const struct kobject *kobj)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static const struct kset_uevent_ops dmabuf_sysfs_no_uevent_ops = {
|
|
.filter = dmabuf_sysfs_uevent_filter,
|
|
};
|
|
|
|
static struct kset *dma_buf_stats_kset;
|
|
static struct kset *dma_buf_per_buffer_stats_kset;
|
|
int dma_buf_init_sysfs_statistics(void)
|
|
{
|
|
dma_buf_stats_kset = kset_create_and_add("dmabuf",
|
|
&dmabuf_sysfs_no_uevent_ops,
|
|
kernel_kobj);
|
|
if (!dma_buf_stats_kset)
|
|
return -ENOMEM;
|
|
|
|
dma_buf_per_buffer_stats_kset = kset_create_and_add("buffers",
|
|
&dmabuf_sysfs_no_uevent_ops,
|
|
&dma_buf_stats_kset->kobj);
|
|
if (!dma_buf_per_buffer_stats_kset) {
|
|
kset_unregister(dma_buf_stats_kset);
|
|
return -ENOMEM;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void dma_buf_uninit_sysfs_statistics(void)
|
|
{
|
|
kset_unregister(dma_buf_per_buffer_stats_kset);
|
|
kset_unregister(dma_buf_stats_kset);
|
|
}
|
|
|
|
int dma_buf_stats_setup(struct dma_buf *dmabuf, struct file *file)
|
|
{
|
|
struct dma_buf_sysfs_entry *sysfs_entry;
|
|
int ret;
|
|
|
|
if (!dmabuf->exp_name) {
|
|
pr_err("exporter name must not be empty if stats needed\n");
|
|
return -EINVAL;
|
|
}
|
|
|
|
sysfs_entry = kzalloc(sizeof(struct dma_buf_sysfs_entry), GFP_KERNEL);
|
|
if (!sysfs_entry)
|
|
return -ENOMEM;
|
|
|
|
sysfs_entry->kobj.kset = dma_buf_per_buffer_stats_kset;
|
|
sysfs_entry->dmabuf = dmabuf;
|
|
|
|
dmabuf->sysfs_entry = sysfs_entry;
|
|
|
|
/* create the directory for buffer stats */
|
|
ret = kobject_init_and_add(&sysfs_entry->kobj, &dma_buf_ktype, NULL,
|
|
"%lu", file_inode(file)->i_ino);
|
|
if (ret)
|
|
goto err_sysfs_dmabuf;
|
|
|
|
return 0;
|
|
|
|
err_sysfs_dmabuf:
|
|
kobject_put(&sysfs_entry->kobj);
|
|
dmabuf->sysfs_entry = NULL;
|
|
return ret;
|
|
}
|